350 likes | 460 Views
Chapter 7 – Part 3. Stored Procedure, Function and Trigger. Objectives. Database Programming Stored Procedure Function Trigger. 1. Database Programming. 1.1 Variables 1.2 Control-of-Flow Tools. 1.1 Variables. Declare a variable: DECLARE @limit money
E N D
Chapter 7 – Part 3 Stored Procedure, Function and Trigger
Objectives • Database Programming • Stored Procedure • Function • Trigger
1. Database Programming 1.1 Variables 1.2 Control-of-Flow Tools
1.1 Variables • Declare a variable: DECLARE @limit money DECLARE @min_rangeint, @hi_rangeint • Assign a value into a variable: SET @min_range = 0, @hi_range = 100 SET @limit = $10 • Assign a value into a variable in SQL statement: SELECT @price = price FROM titles WHERE title_id = 'PC2091'
1.2 Control-of-Flow Tools 1.2.1 BEGIN…END 1.2.2 IF…ELSE 1.2.3 CASE … WHEN 1.2.4 RETURN [n] 1.2.5 WHILE 1.2.6 PRINT
1.2.1 BEGIN…END • Defines a statement block • Other Programming Languages: • C#, Java, C: { … } • Pascal, Delphi: BEGIN … END
1.2.2 IF…ELSE • Defines conditional and, optionally, alternate execution when a condition is false IF 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.‘
1.2.3 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 C#, Java: Switch … Case ; VB: Select … Case
1.2.4 RETURN [n] • Exits unconditionally of Trigger, Procedure or Function and return a value (if any).
1.2.5 WHILE • Repeats a statement (or block) while a specific condition is true WHILE 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
1.2.6 PRINT • Display message in SQL Query Analyze (Console) PRINT string • Other Programming Languages: • Java: System.out.print • C#, VB.NET: Console.WriteLine
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
2.1 What Is a Stored Procedure? • A stored procedure is a collection of T-SQL statements that SQL Server compiles into a single execution plan. • 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. • It can accept input parameters, return output values as parameters, or return success or failure status messages.
2.2 Stored Procedure vs. SQL Statement SQL Statement Stored Procedure • Creating • Check syntax • Compile • First Time • - Check syntax • - Compile • Execute • Return data • First Time • Execute • Return data • Second Time • - Check syntax • - Compile • Execute • Return data • Second Time • Execute • Return data
2.3 Create, update and delete a procedure 2.3.1 Create a Procedure 2.3.2 Update a Procedure 2.3.3 Delete a Procedure
2.3.1 Create a Procedure 2.3.1.1 Syntax 2.3.1.2 Example 1 (Without parameters) 2.3.1.3 Example 2 (With parameters) 2.3.1.4 Example 3 (Using RETURN)
2.3.1.1 Syntax CREATE PROC[EDURE] procedure_name [ @parameter_name data_type] [= default] OUTPUT][,...,n] AS T-SQL_statement(s)
2.3.1.2 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
2.3.1.3 Example 2 (With parameters) CREATE PROC Department_Members @DeptName 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 = @DeptName GROUP BY Dep_Name Run Procedure Execute Department_Members ‘Accounting’
2.3.1.4 Example 3 (Using RETURN ) CREATE PROC GROUPLEADER_MEMBERS @Emp_Code varchar(10) = null AS IF @Emp_Code 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 = @Emp_Code) ORDER BY Emp_Name
2.3.2 Update a Procedure ALTER PROC[EDURE] procedure_name [ @parameter_name data_type] [= default] [OUTPUT] [,...,n] AS t-sql_statement(s)
2.3.3 Delete a Procedure • DROP PROCEDURE procedure_name
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
3.1 What is a Function? • See “What Is a Stored Procedure?” on slide 13 • SQL Server supports three types of user-defined functions: • Scalar functions • Inline table-valued functions • Multi-statement table-valued functions
3.2 Scalar functions Example CREATE FUNCTION Revenue_Day (@Date datetime) Returns money AS BEGIN DECLARE @total money SELECT @total = sum(sali_Quantity * sali_price) FROM Sales_Orders s, Sales_Orders_Items si WHERE s.sal_number = si.sal_number and year(sal_date) = year(@Date) and month(sal_date) = month(@Date) and day(sal_date)= day(@Date) RETURN @total END Use: select dbo.Revenue_In_Day(GETDATE())
3.3 Inline Table-valued Functions Example CREATE FUNCTION AveragePricebyItems (@price money = 0.0) RETURNS table AS RETURN ( SELECT Ite_Description, Ite_Price FROM Items WHERE Ite_Price > @price) Use: select * from AveragePricebyItems (15.00)
3.4 Multi-statement Table-Valued Functions Example CREATE FUNCTION AveragePricebyItems2 (@price money = 0.0) RETURNS @table table (Description varchar(50) null, Price money null) AS begin insert @table SELECT Ite_Description, Ite_Price FROM Items WHERE Ite_Price > @price return end Use: select * from AveragePricebyItems2 (15.00)
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
4.1 What is a Trigger? • A trigger is a special type of stored procedure that is executed automatically as part of a data modification. • A trigger is created on a table and associated with one or more actions linked with a data modification (INSERT, UPDATE, or DELETE). • When one of the actions for which the trigger is defined occurs, the trigger fires automatically • 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
4.2 Creating Syntax CREATE TRIGGER trigger_name ON <tablename> <{FOR | AFTER}> {[DELETE] [,] [INSERT] [,] [UPDATE]} AS SQL_Statement [...n]
4.3 Disable/Enable syntax • Disable syntax Disable trigger <trigger_name> on <table_name> • Enable syntax Enable trigger <trigger_name> on <table_name>
4.4 Deleted and Inserted tables • 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. • When the insert, update or delete statement is executed. All data will be copied into these tables with the same structure. • 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. Insert Update Delete new old old new Inserted Table Deleted Table
4.5 Example CREATE TRIGGER Print_Update ON Bicycle_Inventory FOR UPDATE AS PRINT "The Bicycle_Inventory table was updated"
4.6 Other Functions • View contents of trigger sp_helptext <trigger name> • View number of triggers of a table sp_helptrigger <table name>