intro to tsql unit 14

43
Introduction To SQL Unit 14 Modern Business Technology Introduction To TSQL Unit 14 Developed by Michael Hotek

Upload: syed-asrarali

Post on 22-May-2015

554 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Intro to tsql   unit 14

Introduction To SQLUnit 14

Modern Business Technology

Introduction To TSQLUnit 14

Developed by

Michael Hotek

Page 2: Intro to tsql   unit 14

Batches

• Previously we can discussed batches of SQL statements

• A brief review:– A batch is one or more SQL statements– If one statement in a batch is invalid, the

entire batch is rejected– An object can not be created, dropped,

and recreated in a batch

Page 3: Intro to tsql   unit 14

• So, what does this have to do with stored procedures

• A stored procedure is a batch of SQL statements

• The only difference is that a batch is compiled at the time of execution and a stored procedure is already compiled

Stored Procedures

Page 4: Intro to tsql   unit 14

Stored Procedures

• A stored procedure is a collection of SQL statements that are stored under a name and executed

• Allow many users to execute the same code

• Provide a centralized and consistent implementation of code

• Commonly used by– Frequently used queries– Business logic– Error handling routines– Repetitive administrative functions

Page 5: Intro to tsql   unit 14

Steps to Execution

• When a SQL statement is executed, many things happen on the server– Parsing - the statement is parsed into a

format SQL Server can handle for efficient operation

– Syntax checking - During the parsing stage, the SQL is also checked for any syntax errors

– Resolution - all objects are resolved to their internal representations (IDs)

– Compile - The statement is compiled into machine language the server can execute

– Query plan - A plan for executing the query is determined for the fastest access to data

• All of this happens rather quickly on the server and is required for every statement you execute

Page 6: Intro to tsql   unit 14

Stored Procedures

• When you create a stored procedure all of the steps of parsing, checking, compiling, etc. are carried out

• When the user executes the stored procedure none of these steps need to be performed

• This is what makes stored procedures execute more quickly than batches

Page 7: Intro to tsql   unit 14

Stored Procedures

• The first time a stored procedure is executed, a query plan is built and stored

• This query plan is determined by any arguments passed to the proc the first time and statistics SQL Server keeps

• After the first execution, the stored query plan is used an does not need to be rebuilt

• A stored procedure is not a shared object. Each concurrent user receives their own copy.– If two users simultaneously execute a

stored procedure, there will actually be two copies of the object executing (one for each user)

Page 8: Intro to tsql   unit 14

Benefits

• Execute faster than the same set of commands run as a batch– The code is already compiled– No query plan needs to be created– The code generally resides in memory

• Reduce network traffic– You are sending an exec proc command

instead if the entire batch of SQL across the network

• Enforce consistency– Commands are executed the same– Error handling is standardized

• Provide security– Users can be given execution permission

on a stored procedure that modifies data instead of permission to directly modify the table

• Modular design

Page 9: Intro to tsql   unit 14

Creating

• To create a stored procedure, you issue the create procedure command

create procedure proc_name

as

SQL statement or batch

return

• The stored procedure is stored in the current database, but it can access objects in other databases

• The create procedure command can not be combined with any other statements in a single batch

Page 10: Intro to tsql   unit 14

Guidelines

• Manage the source code of your stored procs the same as you would any other code in the development process

• Even though the DBMS will return at the end of a proc, always end a procedure with the return statement

• Develop naming, commenting, and documentation standards for all of your stored procedures.– Makes procedures more readable– Simplifies identification of procedures– Reduces the administrative overhead

Page 11: Intro to tsql   unit 14

Valid Statements

• Just about any SQL statement can be included in a stored procedure except:– create view– create rule– create default– create procedure– create trigger– use

• Not being able to issue a use can be at times be limiting, so be careful to plan where the stored procedures are located

Page 12: Intro to tsql   unit 14

Naming

• One little known fact for SQL Server (Sybase and MS) is that any procedure named sp_… is treated as a system stored procedure and can be executed with a database different than the one created in

• You can cause the stored procedure to execute in the context of another database simply be preceding it with a database name

(exec pubs..sp_test)

Page 13: Intro to tsql   unit 14

Executing

• To execute a stored procedure, the user issues an execute proc command

execute proc_name or exec proc_name

• You can leave off the exec if the statement is the first statement in a batch, but this is very poor programming

• Procedures can be called from:– Batches– Other stored procedures– Triggers– Other programs

Page 14: Intro to tsql   unit 14

Stored Procedures

• To view the source code for a stored procedure, you would use the sp_helptext (or the equivalent) stored procedure– exec sp_helptext myproc

• You can rename a procedure with sp_rename– exec sp_rename myproc sp_myproc

• To delete (drop) a procedure, issue the drop procedure command– drop procedure myproc– You must drop a procedure before you

create one with the same name– When you change the source code for

the procedure

Page 15: Intro to tsql   unit 14

Input Parameters

• Stored procedures can accept input parameters. (Most procs are constructed this way.)

• An input parameter is nothing more than a variable that is supplied a value when the user executes the proc

• The input parameter(s) are defined within the stored procedure

• This increases the flexibility of the procedure

Page 16: Intro to tsql   unit 14

Input Parameters

create procedure proc_name

(@parameter datatype

[,@parameter datatype…])

as

SQL batch

return

--Single input parameter

create procedure myproc

(@name vahrchar(40))

as

select * from authors where au_lname = @name

return

exec myproc ‘Smith’

Page 17: Intro to tsql   unit 14

Input Parameters

• Parameter names can be up to 30 characters including the @

• There can be up to 255 parameters in a procedure

• A value passed to a procedure can contain a wildcard character as long as the parameter is used in a like clause

• An object name can not be passed as a parameter

Page 18: Intro to tsql   unit 14

Executing Procedures

• A procedure with parameters can be executed two ways:– by name– by position

• When a proc is executed by name, the input parameter is explicitly referenced– exec myproc @name = ‘Smith’

• When called by position, the arguments are in the order the parameters were defined– exec myproc ‘Smith’

• You will very rarely execute a procedure by name. But, executing by name is more self-documenting

Page 19: Intro to tsql   unit 14

Multiple Parameters

• You can define more than one parameter for a stored procedure

create proc myproc

(@var1 int, @var2 int, @var3 char(2))

as…

Page 20: Intro to tsql   unit 14

Default Value

• You do not have to always pass the same number of arguments that have been defined in the procedure

• To allow this, input parameters can be defined with default values

create procedure proc_name

(@parameter datatype = default

[,@parameter datatype = default…])

as

SQL batch

return

Page 21: Intro to tsql   unit 14

Default Values

• When executing a procedure, you must pass values for all parameters that do not have defaults assigned to them

• If a parameter is optional, or is usually assigned a particular value, assign a default to that parameter

Page 22: Intro to tsql   unit 14

Common Errors

• Values are not compatible with the defined datatype

• Parameters are passed via mixed methods; some by name, some by position

• One or more parameters is missing

• Parameters are passed in the wrong order

Page 23: Intro to tsql   unit 14

Stored Procedures

• Sometimes we need to return values from a stored procedure

• This is accomplished with output parameters– This is not supported in all DBMSs

create procedure proc_name

(@parameter datatype = default

[,@parameter datatype = default…]

[,@parameter datatype output…])

as

Page 24: Intro to tsql   unit 14

Error Handling

• You should always implement error handling in your stored procedures

• This includes the use of– raiserror– transactions– return status

• To debug your stored procedures, make use of the print statement to inform you of states of variables and execution branches

• Just make sure to remove these before the procedure goes into production

Page 25: Intro to tsql   unit 14

Output Values

create procedure myproc

(@book_id char(6),

@total_sales int output)

as

select @total_sales = sum(qty)

from salesdetail

where title_id = @book_id

return

declare @total int

exec myproc 'PS2091' @total output

select @total

--------

2045

Page 26: Intro to tsql   unit 14

Return Status

• Every procedure will return a status– 0 for successful completion– -1 to -99 for errors

• Use a return statement to specify a return value– return 10

• The return statement does not accept a variable. (This is what the output parameter is for.)

• When returning values from your procedure do not use one of the reserved numbers from SQL Server

Page 27: Intro to tsql   unit 14

Comments

• Add comments to document functionality

• Establish standards to promote consistency

• Suggestions– Break large single statements across

multiple lines– Create a common header for all procs

• Purpose

• Return values/data

• How to use

• Description of each parameter and variable

• Modification history

• Author, mod date, and creation date– I generally don't identify the author, but

this is preference

Page 28: Intro to tsql   unit 14

Comments

• Suggestions con't:– Include all comments after the as

statement• Any comments included before the as

statement will not get included

– Do all variable declarations and assignment selects in a block

• Example• (Can be found at

http://www.mssqlserver.com/articles)

Page 29: Intro to tsql   unit 14

Transaction Control

• Establish a transaction mode (chained or unchained) for your application -- Sybase only

• Establish a consistent error handling strategy for any failed transaction

• Implement standard procedure templates and transaction control in nested stored procedures to maintain consistency

Page 30: Intro to tsql   unit 14

@@trancount

• @@trancount contains the nesting level of transaction

• Each begin tran increments the variable

• Each commit decrements the variable

• Rollback resets @@trancount to 0

begin tran --@@trancount = 1

begin tran --@@trancount = 2

begin tran --@@trancount = 3

commit --@@trancount = 2

rollback --@@trancount = 0

Page 31: Intro to tsql   unit 14

Nested Procedures

• You can nest procedures (have one procedure that calls another) up to 16 levels deep

create proc…

exec proc2...

exec proc3...

return

Page 32: Intro to tsql   unit 14

Nesting

• A stored procedure containing a transaction can contain another procedure containing a transaction

• Use @@trancount to keep track of the nesting level

• After a commit or rollback in an inner nested procedure, will cause subsequent statements in the outer batch to execute

• Keep in mind the effect of commit and rollback on @@trancount

Page 33: Intro to tsql   unit 14

Nesting and Savepoints

• Nested transactions that contain savepoints, if rolled back, will not cause the outermost transaction to be rolled back

• In order to achieve this effect, you must explicitly name the savepoint

save tran xyz...

rollback tran --Roll back to the savepoint

save tran xyz…

rollback --Rolls back everything

Page 34: Intro to tsql   unit 14

Server Cursors

• Server cursors are cursors that execute within a stored procedure

• They are declared and used exactly as was explained in the cursors unit

create proc…

declare mycursor for…

open mycursor…

fetch mycursor

close mycursor

deallocate mycursor

return

Page 35: Intro to tsql   unit 14

Cursor Scope

• A stored procedure can access the cursors that are declared outside the procedure or in other procedures in the call tree

• If a proc pA declares a cursor cA and then calls proc pB, pB can access cursor cA

• If pB declares a cursor cA, then the cursor in pA is no longer available to pB or any procedures that it calls

Page 36: Intro to tsql   unit 14

Standards

• Add defaults to all input arguments

• Check for missing arguments and print a usage statement

• Check the validity of parameters

• Include return status for error handling

• Print meaningful messages for the user

• Comment your code

Page 37: Intro to tsql   unit 14

Restrictions

• Some SQL statements can not be used

• Create tables before you refer to them

• A table can not be created, dropped, and recreated in the same procedure

• You must drop a procedure before creating another one of the same name

• Procedures can be nested up to 16 levels deep

Page 38: Intro to tsql   unit 14

Notes

• Stored procedures can reference objects in another database

• Temporary tables created in a procedure are dropped when the procedure ends

• Set options in a procedure stay in effect for the duration of the procedure and are reset when it ends

Page 39: Intro to tsql   unit 14

Dependencies

• Stored procedures operate on one or more objects in a database(s)

• Use the sp_depends stored procedure to get a list of objects the stored procedure references

sp_depends proc_name

Page 40: Intro to tsql   unit 14

Recompile

• A query plan is created the first time a procedure is executed

• Sometimes, the query plan is out of date or a different query plan should be used

• To cause SQL Server not recreate the query plan, use the with recompile option

create proc…

with recompile

as...

Page 41: Intro to tsql   unit 14

Recompile

• Use the with recompile only when there is no way to predict the best query plan at compile time

• You can also do this on a one time basis by specifying the with recompile in the execute statement

exec myproc with recompile

• This is generally done to update a query plan with the statistics now available to the DBMS

Page 42: Intro to tsql   unit 14

Unit 14 Review

• A stored procedure is a batch of SQL that is compiled and stored in a database

• Some SQL statements can not be used in a procedure

• A stored procedure can use input parameters to increase the flexibility of the procedure

• Input parameters can be created with default values

• Output parameters can be used to return values

• Every procedure will give a return status

• Comments should be placed in procedures to document the code

• A procedure will take on the current transaction mode the session is working under

• Transactions can be nested

• @@trancount keeps track of the current nesting level

– begin increments– commit decrements– rollback sets to 0

• Stored procedures can see cursors declared within their calling tree

• Use the with recompile option to recreate a query plan

Page 43: Intro to tsql   unit 14

Unit 14 Exercises

• Time allotted for exercises is 1 hour