1 Stored Procedure, Function and Trigger
2Objectives 1. Database Programming 2. Stored Procedure 3. Function 4. Trigger
3 1. Database Programming 1.1 Variables 1.2 Control-of-Flow Tools
4 1.1 Variables l Declare a variable: money int l Assign a value into a variable: = = 100 = $10 l Assign a value into a variable in SQL statement: = price FROM titles WHERE title_id = 'PC2091'
5 1.2 Control-of-Flow Tools BEGIN…END IF…ELSE CASE … WHEN RETURN [n] WHILE PRINT
BEGIN…END l Defines a statement block l Other Programming Languages: { … } – C#, Java, C: { … } BEGIN … END – Pascal, Delphi: BEGIN … END
IF…ELSE l Defines conditional and, optionally, alternate execution when a condition is falseIF Boolean_expression T-SQL_statement | block_of_statements[ELSE T-SQL_statement | block_of_statements ] Example: IF (SELECT ytd_sales FROM titles WHERE title_id = 'PC1035') > 5000 PRINT 'Year-to-date sales are greater than $5,000 for PC1035.‘
CASE … WHEN CASE input_expression WHEN when_expression THEN result_expression [WHEN when_expression THEN result_expression…n] [ELSE else_result_expression ] END Example: SELECT CASE payterms WHEN 'Net 30' THEN 'Payable 30 days after invoice' WHEN 'Net 60' THEN 'Payable 60 days after invoice' WHEN 'On invoice' THEN 'Payable upon receipt of invoice' ELSE 'None' END as Payment_Terms FROM sales ORDER BY payterms Other Programming Language Switch … Case Select … Case C#, Java: Switch … Case ; VB: Select … Case
RETURN [n] l Exits unconditionally of Trigger, Procedure or Function and return a value (if any).
WHILE l Repeats a statement (or block) while a specific condition is trueWHILE Boolean_expression SQL_statement | block_of_statements [BREAK] SQL_statement | block_of_statements [CONTINUE] Example: WHILE (SELECT AVG(royalty) FROM roysched) < 25 BEGIN UPDATE roysched SET royalty = royalty * 1.05 IF (SELECT MAX(royalty)FROM roysched) > 27 BREAK ELSE CONTINUE END SELECT MAX(royalty) AS "MAX royalty" FROM roysched
PRINT Display message in SQL Query Analyze (Console) PRINT string Other Programming Languages: Java: System.out.print C#, VB.NET: Console.WriteLine
12 2. Stored Procedure 2.1 What Is a Stored Procedure? 2.2 Stored Procedure vs. SQL Statement 2.3 Create, update and delete a procedure
What Is a Stored Procedure? l A stored procedure is a collection of T-SQL statements that SQL Server compiles into a single execution plan. l Procedure is stored in cache area of memory when the stored procedure is first executed so that it can be used repeatedly. SQL Server does not have to recompile it every time the stored procedure is run. l It can accept input parameters, return output values as parameters, or return success or failure status messages.
Stored Procedure vs. SQL Statement First Time - Check syntax - Compile - Execute - Return data Second Time - Check syntax - Compile - Execute - Return data First Time - Execute - Return data Second Time - Execute - Return data SQL StatementStored Procedure Creating - Check syntax - Compile
Create, update and delete a procedure Create a Procedure Update a Procedure Delete a Procedure
Create a Procedure Syntax Example 1 (Without parameters) Example 2 (With parameters) Example 3 (Using RETURN)
Syntax CREATE PROC[EDURE] procedure_name data_type] [= default] OUTPUT][,...,n] AS T-SQL_statement(s)
Example 1 (Without parameters) CREATE PROC Departments_Members AS SELECT Dep_Name, COUNT(Emp_ID) NumberOfMember FROM Departments D, Employees E WHERE D.Dep_ID = E.Dep_ID GROUP BY Dep_Name Run Procedure Execute Departments_Members
Example 2 (With parameters) CREATE PROC varchar(50) AS SELECT Dep_Name, COUNT(Emp_ID) NumberOfMember FROM Departments D, Employees E WHERE D.Dep_ID = E.Dep_ID and Dep_Name GROUP BY Dep_Name Run Procedure Execute Department_Members ‘Accounting’
Example 3 (Using RETURN ) CREATE PROC varchar(10) = null AS is null BEGIN PRINT 'Please enter Employee Code!' RETURN END SELECT * FROM Employees WHERE EMP_EMP_ID = (SELECT EMP_ID FROM Employees WHERE Emp_Code ORDER BY Emp_Name
Update a Procedure ALTER PROC[EDURE] procedure_name data_type] [= default] [OUTPUT] [,...,n] AS t-sql_statement(s)
Delete a Procedure l DROP PROCEDURE procedure_name
23 3. Function 3.1 What is a Function? 3.2 Scalar functions Example 3.3 Inline Table-valued Functions Example 3.4 Multi-statement Table-Valued Functions Example
What is a Function? “What Is a Stored Procedure?” l See “What Is a Stored Procedure?” on slide 13 l SQL Server supports three types of user-defined functions: – Scalar functions – Inline table-valued functions – Multi-statement table-valued functions
Scalar functions Example CREATE FUNCTION Revenue_Day datetime) Returns money AS BEGIN money = sum(sali_Quantity * sali_price) FROM Sales_Orders s, Sales_Orders_Items si WHERE s.sal_number = si.sal_number and year(sal_date) = and month(sal_date) = and day(sal_date)= END Use: select dbo.Revenue_In_Day(GETDATE())
Inline Table-valued Functions Example CREATE FUNCTION AveragePricebyItems money = 0.0) RETURNS table AS RETURN ( SELECT Ite_Description, Ite_Price FROM Items WHERE Ite_Price Use: select * from AveragePricebyItems (15.00)
Multi-statement Table-Valued Functions Example CREATE FUNCTION AveragePricebyItems2 money = 0.0) table (Description varchar(50) null, Price money null) AS begin SELECT Ite_Description, Ite_Price FROM Items WHERE Ite_Price return end Use: select * from AveragePricebyItems2 (15.00)
28 4. Trigger 4.1 What is a Trigger? 4.2 Creating Syntax 4.3 Disable/Enable syntax 4.4 Deleted and Inserted tables 4.5 Example 4.6 Other Functions
What is a Trigger? l A trigger is a special type of stored procedure that is executed automatically as part of a data modification. l A trigger is created on a table and associated with one or more actions linked with a data modification (INSERT, UPDATE, or DELETE). l When one of the actions for which the trigger is defined occurs, the trigger fires automatically l Following are some examples of trigger uses: – Maintenance of duplicate and derived data – Complex column constraints – Cascading referential integrity – Complex defaults – Inter-database referential integrity
Creating Syntax CREATE TRIGGER trigger_name ON {[DELETE] [,] [INSERT] [,] [UPDATE]} AS SQL_Statement [...n]
Disable/Enable syntax l Disable syntax Disable trigger on l Enable syntax Enable trigger on
Deleted and Inserted tables l When you create a trigger, you have access to two temporary tables (the deleted and inserted tables). They are referred to as tables, but they are different from true database tables. They are stored in memory—not on disk. l When the insert, update or delete statement is executed. All data will be copied into these tables with the same structure. l The values in the inserted and deleted tables are accessible only within the trigger. Once the trigger is completed, these tables are no longer accessible. Inserted Table Deleted Table new old InsertUpdateDelete
3 4.5 Example CREATE TRIGGER Print_Update ON Bicycle_Inventory FOR UPDATE AS PRINT "The Bicycle_Inventory table was updated"
Other Functions l View contents of trigger sp_helptext l View number of triggers of a table sp_helptrigger
35
36