Stored Procedure, Function and Trigger
Slide 1
Objectives
1. Database Programming
2. Stored Procedure
3. Function
4. Trigger
Slide 2
1. Database Programming
1.1 Variables
1.2 Control-of-Flow Tools
Slide 3
1.1 Variables
• Declare a variable:
DECLARE @limit money
DECLARE @min_range int, @hi_range int
• 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'
Slide 4
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
Slide 5
1.2.1 BEGIN…END
• Defines a statement block
• Other Programming Languages:
• C#, Java, C: { … }
• Pascal, Delphi: BEGIN … END
Slide 6
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.‘
Slide 7
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
Slide 8
1.2.4 RETURN [n]
• Exits unconditionally of Trigger, Procedure or Function and return a
value (if any).
Slide 9
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
Slide
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
Slide
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
Slide
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.
Slide
2.2 Stored Procedure vs. SQL Statement
SQL Statement Stored Procedure
Creating
- Check syntax
- Compile
First Time First Time
- Check syntax - Execute
- Compile - Return data
- Execute
- Return data
Second Time Second Time
- Check syntax - Execute
- Compile - Return data
- Execute
- Return data
Slide
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
Slide
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)
Slide
2.3.1.1 Syntax
CREATE PROC[EDURE] procedure_name
[ @parameter_name data_type] [= default] OUTPUT][,...,n]
AS
T-SQL_statement(s)
Slide
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
Slide
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’
Slide
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
Slide
2.3.2 Update a Procedure
ALTER PROC[EDURE] procedure_name
[ @parameter_name data_type]
[= default] [OUTPUT]
[,...,n]
AS
t-sql_statement(s)
Slide
2.3.3 Delete a Procedure
• DROP PROCEDURE procedure_name
Slide
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
Slide
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
Slide
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())
Slide
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)
Slide
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)
Slide
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
Slide
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
Slide
4.2 Creating Syntax
CREATE TRIGGER trigger_name
ON <tablename>
<{FOR | AFTER}>
{[DELETE] [,] [INSERT] [,] [UPDATE]}
AS
SQL_Statement [...n]
Slide
4.3 Disable/Enable syntax
• Disable syntax
Disable trigger <trigger_name> on <table_name>
• Enable syntax
Enable trigger <trigger_name> on <table_name>
Slide
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.
Insert Update Delete
new new old old
Inserted Table Deleted Table
• 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.
Slide
4.5 Example
CREATE TRIGGER Print_Update
ON Bicycle_Inventory
FOR UPDATE
AS
PRINT "The Bicycle_Inventory table was updated"
Slide
4.6 Other Functions
• View contents of trigger
sp_helptext <trigger name>
• View number of triggers of a table
sp_helptrigger <table name>
Slide
Slide