DBMS Lab # 9 Procedures PDF
DBMS Lab # 9 Procedures PDF
DBMS Lab # 9 Procedures PDF
A stored procedure is nothing more than prepared SQL code that you save so you can reuse
the code over and over again. So if you think about a query that you write over and over
again, instead of having to write that query each time you would save it as a stored procedure
and then just call the stored procedure to execute the SQL code that you saved as part of the
stored procedure.
In addition to running the same SQL code over and over again you also have the ability to
pass parameters to the stored procedure, so depending on what the need is, stored procedure
can act accordingly based on the parameter values that were passed.
Before you create a stored procedure you need to know what your end result is, whether you
are selecting data, inserting data, etc..
In this simple example we will just select all data from the Persons table that is stored in a
specific database. Lets name this database as dbmsLab.
So the simple T-SQL code executing in dbmsLab selected database would be as follows
which will return all rows from this table.
USE dbmsLab
GO
To call the procedure to return the contents from the table specified, the code would be:
EXEC Proc_Persons_GetAddressfx
When creating a stored procedure you can either use CREATE PROCEDURE or CREATE
PROC. After the stored procedure name you need to use the keyword "AS" and then the rest
is just the regular SQL code that you normally execute.
One thing to note is that you cannot use the keyword "GO" within the stored Procedure. Once
the SQL Server compiler sees "GO" it assumes it is the end of the batch.
Also, you cannot change database context within the stored procedure such as using "USE
dbName" the reason for this is because this would be a separate batch and a stored procedure
is a collection of only one batch of statements.
Just like you have the ability to use parameters with your SQL code you can also setup your
stored procedures to accept one or more parameter values.
One Parameter
In this example we will query the Persons table from the dbmsLab database, but instead of
getting all records we will limit it to just a particular city. This example assumes there will
be an exact match on the City value that is passed.
USE dbmsLab
GO
We can also do the same thing, but allow the users to give us a starting point to search the
data. Here we can replace "=" by a LIKE and use the "%" wildcard.
USE dbmsLab
GO
In both of the proceeding examples it assumes that a parameter value will always be
passed. If you try to execute the procedure without passing a parameter value you will get an
error message such as the following:
Procedure or function 'uspGetAddress' expects parameter '@City', which was not supplied.
In most cases it is always a good practice to pass all parameter values, but sometimes it is not
possible. So in this example we use the NULL option to allow you to not pass a parameter
value. If we create and run this stored procedure it will not return any data.
USE dbmsLab
GO
EXEC dbo.uspGetAddress;
We could change this stored procedure and use the ISNULL function to get around this. So if
a value is passed it will use the value to narrow the result set and if a value is not passed it
will return all records. (Note: if the City column has NULL values this will not include these
values. You will have to add additional logic for City IS NULL)
ISNULL(expression, alternate_value)
USE dbmsLab
GO
Setting up multiple parameters is very easy to do. You just need to list each parameter and
the data type separated by a comma as shown below.
USE dbmsLab
GO
Setting up output paramters for a stored procedure is basically the same as setting up input
parameters, the only difference is that you use the OUTPUT clause after the parameter name
to specify that it should return a value. The output clause can be specified by either using the
keyword "OUTPUT" or just "OUT". For these examples we are still using the dbmsLab
database, so all the stored procedures should be created in the dbmsLab database.
Simple Output
CREATE PROCEDURE Proc_Persons_GetAddress @City nvarchar(30), @AddressCount
int OUTPUT
AS
SELECT @AddressCount = count(*)
FROM dbmsLab.Person
WHERE City = @City
To call this stored procedure we would execute it as follows. First we are going to declare a
variable, execute the stored procedure and then select the returned valued.
This can also be done as follows, where the stored procedure parameter names are not passed.
ALTER PROCEDURE
Modifying or ALTERing a stored procedure is pretty simple. Once a stored procedure has
been created it is stored within one of the system tables in the database where it was created
in. When you modify a stored procedure the entry that was originally made in the system
table is replaced by this new code. Also, SQL Server will recompile the stored procedure the
next time it is run, so your users are using the new logic. The command to modify an
existing stored procedure is ALTER PROCEDURE or ALTER PROC.
Let's say we have the following existing stored procedure: This allows us to do an exact
match on the City.
To change the stored procedure and save the updated code you would use the ALTER
PROCEDURE command as follows.
Now the next time that the stored procedure is called by an end user it will use this new logic.
DROP PROCUDEURE
The syntax is very straightforward to drop a stored procedure, here are some examples.
To drop a single stored procedure you use the DROP PROCEDURE or DROP PROC
command as follows.
To drop multiple stored procedures with one command you specify each procedure separated
by a comma as shown below.
TASK1:
Create a table named as Persons.
Now create a procedure to insert following values into this table. The values will be given by passing
parameters to the procedure.
Tbl_Emp
Tbl_Dept:
Create a Procedure that “retrieves those employees whose department is Computer Engg and also
shows the name of head of that department”. Use Simple Join in the Query.
USEFUL INFORMATION:
SQL Server has no way to prompt read from a keyboard or mouse. It's a data repository and access
tool.