Stored procedures


Published on

Published in: Education, Technology
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Stored procedures

  1. 1. CIS-282
  2. 2. Scripts v. Stored Procedures Script: Text file of SQL commands Stored Procedure: SQL commands stored in database itself  SPROC’s have more capabilities than a script
  3. 3. BATCH Batch is a logical group of SQL statements  Run-time error will halt execution only of FURTHER steps Can break up multiple steps using GO  Not available in all tools  GO causes editing tool to send statements to that point for execution  GO isn’t sent to SQL Server
  4. 4. Format of SPROC’s CREATE PROCEDURE <name> <parameter list> AS <instructions to execute>
  5. 5. EXECUTE EXEC(cute) statement OR EXEC(cute) stored procedure name Statement or sproc runs in it’s own scope  Can’t ‘share’ variables directly  User’s security rules apply  Can’t be used in User Defined Function (UDF)
  6. 6. Uses of Stored Procedures For returning data (select) For editing data For calculations
  7. 7. Parameters Method for sending data into and from a stored procedure  INPUT parameters are values sent in  OUTPUT parameters are values returned  Must have a holding space (variable) for the returned data Defined before start of procedure (AS)
  8. 8. Declaring Parameters Include name and datatype Default value is optional  Without a default value, parameter is required Direction is optional (input is default)  An output parameter must have direction specified
  9. 9. Sample Input ParameterCREATE PROC upFindStudent @SID char(9)AS SELECT * FROM Persons Where SchoolID=@SID
  10. 10. Sample Output ParameterCREATE PROC upFindStudentID @First varchar(25), @Last varchar(35), @SID char(9) OUTPUTAS SELECT @SID=SchoolID FROM Students_T Where @First=Firstname and @Last=Lastname
  11. 11. Return Values Result of stored procedure indicates success or failure Non-zero value indicates a problem Must be an integer Different from an output parameter  Output parameter is about data RETURN <value>  Causes immediate exit
  12. 12. Variables Create using DECLARE Need to start with ‘@’ Can use SQL data types or custom data typesDECLARE @StudentName varchar(50)
  13. 13. Variable Assignment SET is usually used similar to procedural language SET @Var=value SELECT is usually used when getting a value from a query SELECT @Var=Sum(PossiblePoints) FROM Assignments
  14. 14. Decision Making SQL supports two structures for branching:  IF  CASE Both structures are similar to other languages (IF … THEN, SELECT CASE) Both structures tend to have specific places where used
  15. 15. IF Blocks IF … ELSE  No end if  Need to use Begin/End if have more than one instruction to executeIF StartDate < EndDate Begin … EndELSE
  16. 16. Simple Case Statement CASE  Similar to SELECT CASE  Compares one value to different casesCASE Category WHEN ‘pop_comp’ THEN ‘Popular Computing’ WHEN ‘mod_cook’ THEN ‘Modern Cooking’END
  17. 17. Searched CASE No test expression Each WHEN has a boolean testCASE WHEN Points >= 90 THEN ‘A’ WHEN Points < 90 AND Extra > 0 THEN ‘A’END
  18. 18. Looping (While) Typically used with a CURSOR  Cursor data type allows a table to be stored in memory and each row/field to be accessed BREAK allows early exit from loop CONTINUE forces control to start of loop Working with sets is preferred over loops (SQL is about sets)
  19. 19. Finding Identity Values When need to find the value used to identify the last row added @@Identity Scope_Identity Ident_Current
  20. 20. @@Identity System variable, created/maintained automatically Returns the last identity value used as a result of INSERT or SELECT INTO  Not limited to current scope; may not get correct value Returns Null if operation failed or a value wasn’t generated Returns last number created if multiple inserts occur (i.e. SELECT INTO)
  21. 21. Scope_Identity() Return the last identity values generated in any table in the current session. Returns values inserted only within the current scope  Not affected by other operations.
  22. 22. Ident_Current() Not limited by scope and session; Limited to a specified table (table name specified as an argument value).
  23. 23. @@Rowcount System variable, created/maintained automatically Number of rows returned or affected by the last statement 0 (zero) is often used as a logical test  If no records found for where clause, notify system or process
  24. 24. Errors Errors can occur because of SQL statement  Invalid syntax, or data type Errors can also reflect business rules  Data doesn’t match requirements
  25. 25. @@Error System variable, created/maintained automatically Value set after each SQL statement; 0 (zero) means statement was successful Number other than zero is typically a specific error Can store value in variable and test
  26. 26. Try/Catch Similar to .Net languages Need to include BEGIN/END BEGIN TRY <code> END TRY BEGIN CATCH <error handling code> END CATCH
  27. 27. Raise Error Used to send information to calling program Syntax:RaisError (Message string OR Message ID, Severity, State)  Severity – <14 information; 15-19 warning or user can correct; 20+ fatal  State – way to differentiate problems if needed; typically use 1 RAISERROR (50001,16,1)
  28. 28. Error Message Message ID or String  Use ID if have custom or TSQL error to use  Use String for ‘on the fly’ message Stored Error Messages are server-specific  Can add message to server  ID Number must be greater than 50000
  29. 29. Custom Error Messages Messages can include a parameter with % to allow addition to message  ‘D’ – signed integer  ‘O’ – unsigned octal  ‘P’ – pointer  ‘S’ – string  ‘U’ – unsigned integer  ‘X’ or ‘x’ – unsigned hexadecimal
  30. 30. Severity & State 1 – 18: Informational (range can vary – not exact)  11 – 16 typically raise error at client 19 – 25: Severe error  20+ is fatal error and connection will terminate State is ‘ad hoc’ and can help if same error happens in multiple places  Range of 1 – 127
  31. 31. Sample Error Message RaisError(‘Operation cannot be completed because field %s cannot be null’,1,1,’fieldname’)
  32. 32. Transactions Provides method for canceling an operation Can restore rows, columns to original state in event of error or business logic failure Use when changes will either be committed or discarded in entirety
  33. 33. ACID Atomicity: All of the changes will be accepted or none of the changes will be accepted Consistency: Data is either in its original or changed state Isolation: If multiple transactions occur, data is never available in an intermediate state Durability: Once finished, all changes are complete and changes can only be done by another transaction/unit of work
  34. 34. Using A Transaction Begin Tran: Identifies the start Commit Tran: Write changes Rollback Tran: Cancel changes Be sure to issue a Commit or Rollback  Connection Stays Open Until Transaction is terminated
  35. 35. Locking & Concurrency Locking allows a transaction to ensure that it can rollback Prevents other operations from changing that data Concurrency refers to multiple actions running against database at the same time  What happens if you want to change data I’m working with?
  36. 36. Sample Locking Levels Database Table Extent (memory) Page (subset of extent) Key Row
  37. 37. Cursors Processing based on each row  not set operations Declare @Cursor Cursor Set @Cursor = Cursor For (select statement) Open @Cursor Fetch Next From @Cursor into (variables matching field list in select)
  38. 38. Using a CursorDeclare @Students CursorSet @Cursor = Cursor For (Select FirstName, LastName From Students)Open @StudentsWhile @@Fetch_Status = 0 Begin Fetch Next From @Students Into @First, @Last Print @First + ‘ ‘+ @Last EndClose @StudentsDeallocate @Students
  39. 39. @@Fetch_Status 0 success; -1 failed (read record outside recordset); -2 missing record (eg. someone else deleted)