310 likes | 403 Views
Chapter 9 ( tt ). STORED PROCEDURES AND FUNCTION (9.6.1). Introduction. Stored procedure (SP): is a segment of code which contains declarative or procedural SQL statements.
E N D
Chapter 9 (tt) STORED PROCEDURES AND FUNCTION (9.6.1)
Introduction • Stored procedure (SP): is a segment of code which contains declarative or procedural SQL statements. • A stored procedure is resided in the catalog of the database server so we can call it from a trigger, another stored procedure or even from client applications. • Stored procedures are essentially functions that you can create in the database and reuse. They can take input parameters and then return a result
Stored procedures type • System SP (sp): is stored in the Master database, but can be executed in any database without using its full name. • sp_helptext: Prints the text of a rule, a default, or an unencrypted stored procedure, user-defined function, trigger, computed column, or view. Example : master.dbo.sp_helptext • sp_help: Reports information about a database object • sp_depends: Displays information about database object dependencies the view(s), trigger(s), and procedure(s)—in the database that depend on a specified table or view,
Stored procedures type • Extended SP (xp): is created from other languages (C++,...) and used as a procedure of SQL Server User_defined : • Local sp: is an object in the database to execute the tasks. It can be created in master db. • Temporary sp: local (with the name begun by #) and global (with the name begun by ##).
Create stored procedures • Syntax: CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type} [ VARYING ] [ = default ] [ OUTPUT ] ] [,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement[ ...n ]
Create stored procedures • Example: CREATE PROCEDURE OrderSummary AS SELECT Ord.EmployeeID, SummSales=SUM(OrDet.UnitPrice*OrDet.Quantity) FROM Orders AS Ord JOIN [Order Details] AS OrDet ON (Ord.OrderID = OrDet.OrderID) GROUP BY Ord.EmployeeID
Execute stored Procedures • Execute: Executes user-defined function, a system procedure, a user-defined stored procedure, or an extended stored procedure. • Syntax: [ [ EXEC [ UTE ] ] {[ @return_status= ] { procedure_name[ ;number ] | @procedure_name_var } [ [ @parameter= ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ] [,...n ] [ WITH RECOMPILE ]
Execute stored Procedures • Or • Example: EXECUTE dbo.overdueOrders EXECUTEProductName[ ; number ] [<parameter>[, …n][ OUTPUT ]]
Modify stored Procedures • Syntax: ALTER PROCEDURE procedure_name [WITH option] AS sql_statement [...n]
Modify stored Procedures • Example: ALTER PROC dbo.overdueOrders AS SELECTCONVERT(CHAR(8), RequiredDate,1) RequiredDate, CONVERT(CHAR(8), orderDate,1) orderDate, orderId, Customerid, EmployeeID FROMdbo.orders WHERERequiredDate<GETDATE()and shippeddate is null ORDER BY RequiredDate
Delete stored Procedures • Syntax: • DROP PROC owner.stored_procedure_name
Using parameter in stored Procedures • Input parameter: CREATE PROCEDURE procedure_name [@parameter_namedata_type] [=default_value] [WITH option] AS sql_statement[...n]
Using parameter in stored Procedures • Example 1: CREATE PROC dbo.MovieByRating @rating varchar(5) = NULL AS SELECT rating , title FROM movie WHERE rating = @rating ORDER BY title
Using parameter in stored Procedures • Example2 : CREATE PROC sp_name @parameter data_type =value AS IF @parameter IS NULL BEGIN PRINT ‘Message Line 1’ PRINT ‘Message Line 2’ RETURN END SELECT statement GO
Using parameter in stored Procedures • Output parameter: CREATE PROCEDURE procedure_name [@parameter_namedata_type] [=default_value] OUTPUT [WITH option] AS sql_statement [...n]
Using parameter in stored Procedures • Example: CREATE PROC count_row @movie_countint OUTPUT AS SELECT @movie_count = COUNT(*) FROM Movie GO • Sp execution with output parameter: a variable must be declared to stored the return value of the output parameter DECLARE @numint EXEC count_row @num OUTPUT SELECT @num
Errors management • sp_addmessage: Stores a new user-defined error message in an instance of the SQL Server Database Engine. Messages can be viewed by using the sys.messages. • Syntax: sp_addmessage [ @msgnum= ] msg_id , [ @severity= ] severity , [ @msgtext= ] 'msg' [ , [ @lang= ] 'language' ] [ , [ @with_log= ] { 'TRUE' | 'FALSE' } ] [ , [ @replace= ] 'replace' ]
Errors management Example: Create an error message by sp_addmessage EXEC sp_addmessage @msgnum = 50001, @severity = 10, @msgtext=‘Cannot delete customer. Customer has orders .’, @withlog = ‘true’ GO
Errors management VD: Display an error message when delete a customer CREATE PROC DeleteCust @cust_numnvarchar(5) = null AS IF EXISTS (SELECT customerID FROM Orders WHERE customerID like @cust_num) BEGIN RAISERROR (50001, 10, 1) RETURN END DELETE FROM Customers WHERE customerID like @cust_num GO
Errors management • @@ERROR: Returns an error number if the previous statement encountered an error. Example: USE AdventureWorks2008R2; GO UPDATE HumanResources.EmployeePayHistory SET PayFrequency = 4 WHERE BusinessEntityID = 1; IF @@ERROR = 547 PRINT N'A check constraint violation occurred.'; GO
Errors management • @@ERROR and @@ROWCOUNT: Use to validate the operation of an UPDATE statement. • The value of @@ERROR is checked for any indication of an error. • The value of @@ROWCOUNT is used to ensure that the update was successfully applied to a row in the table.
FUNCTION • System function: • aggregate funtion: avg(), count(), count(*), sum(), max(), min(),... • Other function: getdate(), month(), upper(), user_name(),@@rowcount,... • User-defined function: • Allow you to define your own T-SQL functions that can accept zero or more parameters and return a single scalar data value or a table data type.
FUNCTION • There are 3 type User-defined function: • Scalar: return a single value, based on the input value. • Multi-statement Table-valued: return a set of row • Inline Table-valued: return a set of row
FUNCTION • Scalar function: CREATE FUNCTION [ owner_name. ] function_name( [ { @parameter_name [AS] scalar_parameter_data_type[= default ] } [ ,...n ] ] ) RETURNSscalar_return_data_type. [WITH < function_option> [ [,] ...n] ] [AS ] BEGIN function_body RETURN scalar_expressionEND
FUNCTION • Example: CREATE FUNCTION dbo.OrderNum(@monthOrdtinyint ) RETURNS tinyint AS BEGIN DECLARE @Ordnumtinyint SELECT @Ordnum = count(orderid) FROM Orders WHERE month(orderdate)= @monthOrd RETURN @Ordnum END GO
FUNCTION • Execute: • SELECT dbo.OrderNum(7) • Function can be used in the “Where” clause Select orderid from orders where dbo.OrderNum(7) > 50 and month(orderdate)=7
FUNCTION • Table-valued Functions CREATE FUNCTION [ owner_name. ] function_name([{ @parameter_name [AS] scalar_parameter_data_type[= default ] } [,...n ] ]) RETURNSTABLE [WITH < function_option > [ [,] ...n ] ] [AS ] RETURN [(] select-stmt[)]
FUNCTION • Example: CREATE FUNCTION SalesByCategory(@CategoryidInt) RETURNS TABLE AS RETURN (SELECT c.CategoryName, P. ProductName, SUM(Quantity) AS TotalQty FROM Categories c INNER JOIN Products p ON c.CategoryID= p. CategoryID INNER JOIN [Order Details] od ON p.ProductID = od.ProductID WHERE c.CategoryID= @Categoryid GROUP BY c. CategoryName,p.ProductName)
FUNCTION • Multistatement Table-valuesd • CREATE FUNCTION [owner_name.]function_name • ([{@parameter_name [AS] data_type [=default]} [ ,…n ]]) • RETURNS@return_variable • TABLE ({column_definition | table_constraint} [ ,…n ]) • [WITH { ENCRYPTION | SCHEMABINDING } [ [,] ...n] ] • [AS] • BEGIN • function_body • RETURN • END
FUNCTION • Example: CREATE FUNCTION Contacts(@suppliers bit=0) RETURNS @Contacts TABLE (ContactNamenvarchar(30), Phone nvarchar(24), ContactTypenvarchar(15)) AS BEGIN INSERT @Contacts SELECT ContactName, Phone, 'Customer' FROM Customers INSERT @Contacts SELECT FirstName + ' ' + LastName, HomePhone, 'Employee' FROM Employees IF @Suppliers=1 INSERT @Contacts SELECT ContactName, Phone, 'Supplier‘ FROM Suppliers RETURN END
FUNCTION • Execute: SELECT * FROM CONTACTS(1) ORDER BY ContactName