advanced sql: stored procedures instructor: mohamed eltabakh [email protected] 1
TRANSCRIPT
![Page 2: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/2.jpg)
Today’s Roadmap
Views
Triggers
Assertions
Cursors
Stored Procedures
![Page 3: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/3.jpg)
Stored Procedures & Functions
Views
Way to register queries inside DBMS
Stored Procedures & Functions
Way to register code inside DBMS
![Page 4: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/4.jpg)
Stored Procedures & Functions What is stored procedure?
Piece of code stored inside the DBMS SQL allows you to define procedures and functions and store
them inside DBMS
Advantages Reusability: do not need to write the code again and again Programming language-like environment
Assignment, Loop, For, IF statements Call it whenever needed
From select statement, another procedure, or another function
![Page 5: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/5.jpg)
cs3431
Stored Procedures in Oracle
Stored procedures in Oracle follow a language called PL/SQL
PL/SQL: Procedural Language SQL
Same language used inside DB triggers
![Page 6: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/6.jpg)
cs3431
Creating A Stored Procedure
CREATE [OR REPLACE] PROCEDURE <procedureName> (<paramList>) [IS| AS]<localDeclarations>
Begin<procedureBody>;
End;/
A parameter in the paramList is specified as: <name> <mode> <type>
Mode: IN input parameter (default) OUT output parameter INOUT input and output parameter
If exists, then drop it and create it again ‘IS’ or ‘AS’ both are valid
![Page 7: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/7.jpg)
General Structure
CREATE [OR REPLACE] PROCEDURE procedure_name [ (parameter [,parameter]) ]
[IS | AS] [declaration_section]
BEGIN executable_section
[EXCEPTION exception_section]
END [procedure_name];
Optional section for exception handling
![Page 8: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/8.jpg)
Example I
By default, it is INDefine a variable
Execute the command and create the procedure
In PL/SQL a ‘;’ ends a line without execution
You can use the procedure name before the parameter name
![Page 9: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/9.jpg)
Declaration section
Define a cursor that references the input parameter
Example II
When anything goes wrong, it will come to Exception section
![Page 10: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/10.jpg)
Calling a Stored Procedure
SQL> exec <procedureName> [(<paramList>)];
SQL > exec remove_emp (10);
![Page 11: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/11.jpg)
Printing From Stored Procedures
Taking three parameters
Printing lines to output screen
![Page 12: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/12.jpg)
Features in Stored Procedures
Create Procedure profiler_control(start_stop IN VARCHAR2, run_comm IN VARCHAR2, ret OUT number) AS
ret_code INTEGER;
BEGIN ret_code := 10;
IF start_stop NOT IN ('START','STOP') THEN ret:= 0; ELSIF start_stop = 'START' THEN ret:= 1; ELSE ret:= ret_code; END IF;
END profiler_control;/
IN parameters
OUT parameters
Variable declaration
Variable assignment
IF statement
![Page 13: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/13.jpg)
More Features: LOOP Statement
CREATE PROCEDURE testProcedure (name varchar2) AS credit_rating NUMBER := 0;
BEGIN
LOOP
credit_rating := credit_rating + 1;
IF credit_rating > 3 THEN
EXIT;
END IF;
END LOOP;
-- control resumes here
IF name > ‘abc’ THEN
RETURN;
END IF;
DBMS_OUTPUT.PUT_LINE ('Credit rating: ' || TO_CHAR(credit_rating));
END;
/
Return means exit the procedure
The Loop statement
![Page 14: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/14.jpg)
More Features: CURSOR & FOR Statement
Create Procedure OpeningBal (p_type IN string) AS
cursor C1 Is
Select productId, name, price
From products
where type = p_type;
Begin
For rec in C1 Loop
Insert into Temp values (rec.productId, rec.name, rec.price);
End Loop;
End;
/
![Page 15: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/15.jpg)
Return Value
Stored procedures can set output variables
Stored procedures do not return values
Stored functions differ from procedure in that they return values
![Page 16: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/16.jpg)
Stored Functions Similar to stored procedures except that they return value
CREATE [OR REPLACE] FUNCTION <functionName> RETURN <type> [(<paramList>)] AS
<localDeclarations><functionBody>;
The function return a number
Select into a variable
Return to the called
![Page 17: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/17.jpg)
Stored Functions
All features in stored procedures are valid in in stored functions
Functions have an extra ‘Return’ statement
![Page 18: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/18.jpg)
Using Stored Procedures or Functions
Stored Procedures Called from other procedures, functions, triggers, or
standalone
Stored Functions In addition to above, can be used inside SELECT statement
In WHERE, HAVING, or projection list
![Page 19: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/19.jpg)
Example I
CREATE FUNCTION MaxNum() RETURN number AS
num1 number;
BEGIN
SELECT MAX (sNumber) INTO num1 FROM Student;
RETURN num1;
END;
/
SQL> Select * from Student where sNumber = MaxNum();
Calling the function in the Where clause (function will be executed once)
![Page 20: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/20.jpg)
Example II
CREATE FUNCTION MaxNum(lastName_in varchar2)
RETURN number AS
num1 number;
BEGIN
SELECT MAX (sNumber) INTO num1 FROM Student Where lastName = lastName_in;
RETURN num1;
END;
/
SQL> Select * from Student S where S.sNumber = MaxNum(S.lastName);
Calling the function in the Where clause(function will execute with each record in Student)
Adding a parameter
![Page 21: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/21.jpg)
Example III
CREATE FUNCTION MaxNum(lastName_in varchar2)
RETURN number AS
num1 number;
BEGIN
SELECT MAX (sNumber) INTO num1 FROM Student Where lastName = lastName_in;
RETURN num1;
END;
/
SQL> Select MaxNum(S.lastName) from Student S;
Calling the function in the projection list
![Page 22: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/22.jpg)
Summary of Stored Procedures/Functions
Code modules that are stored inside the DBMS
Used and called repeatedly
Powerful programing language style
Can be called from other procedures, functions, triggers, or from select statement (only functions)
![Page 23: Advanced SQL: Stored Procedures Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1](https://reader035.vdocuments.site/reader035/viewer/2022062516/56649d8e5503460f94a771ed/html5/thumbnails/23.jpg)
End of Advanced SQL
Views
Triggers
Assertions
Cursors
Stored Procedures/Functions