procedure and functions. procedures syntax: [create [or replace]] procedure pname [(p1, p2…)][is |...
TRANSCRIPT
Procedure and Functions
Procedures Syntax:[CREATE [OR REPLACE]] PROCEDURE
Pname[(p1, p2…)] [IS | AS]
[declarations]BEGIN
[Execution Statements][EXCEPTIONS
exception_handling]END [Pname];/
2
ExampleCREATE PROCEDURE PrintNameIS
Address VARCHAR2(50);BEGIN
Address := ‘102 Main St, Frostburg MD 21532’;
DBMS_OUTPUT.PUT_LINE(Address);END PrintName;/
3
Run the ProcedureEXEC PrintName();EXEC PrintName;
4
Procedure with ParameterCREATE OR REPLACE PROCEDURE Print_B_Date (V_ID
NUMBER)
IS
V_B_Date DATE;
BEGINSELECT B_Date INTO V_B_Date
FROM Employee
WHERE ID=V_ID;
DBMS_OUTPUT.PUT_LINE(V_B_Date);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘No Data Found’);
END Print_B_Date;
/
5
Call Procedure & Check for ErrorsEXEC Print_B_Date(112);
SHOW ERRORS;
6
ExampleCREATE PROCEDURE Largest (P1 NUMBER, P2 NUMBER)ISBEGIN
DBMS_OUTPUT.PUT_LINE(‘The First Number is’ || P1);DBMS_OUTPUT.PUT_LINE(‘The Second Number is’ || P2);
IF(P1>P2) THENDBMS_OUTPUT.PUT_LINE(‘The Largest Number is’ || P1);
ELSE DBMS_OUTPUT.PUT_LINE(‘The Largest Number is’ || P2);
END IF;END Largest;/
7
Call ProcedureEXEC Largest(12, 24);EXEC Largest(24, 12);
8
Procedure with default valueCREATE PROCEDURE Data ( Name
VARCHAR2, B_Date DATE DEFAULT SYSDATE)
ISBEGIN
DBMS_OUTPUT.PUT_LINE(Name || B_Date);
END;/
9
Procedure CallEXEC Data(‘Jim Smith’, ‘12-MAR-03’)EXEC Data(‘Mary Show’);
10
Dropping ProcedureDROP PROCEDURE Largest;
11
Functions Syntax:[CREATE [OR REPLACE]] FUNCTION Fname[(p1, p2…)] RETURN datatype [IS | AS]
[declarations]BEGIN
[Execution Statements][EXCEPTIONS
exception_handling]END [Fname];/
12
ExampleCREATE FUNCTION PrintNameF RETURN
BOOLEANIS
Address VARCHAR2(50);BEGIN
Address := ‘102 Main St, Frostburg MD 21532’;
DBMS_OUTPUT.PUT_LINE(Address);RETURN true;
END PrintNameF;/
13
Run a Function:DECLARE
flag BOOLEAN;
BEGIN Flag:=PrintNameF;IF flag THEN
DBMS_OUTPUT.PUT_LINE(‘Function Printed Correctly’));
END IF;
END;/
14
Function with ParameterCREATE OR REPLACE FUNCTION Print_B_DateF (V_ID NUMBER) RETURN
CHAR IS
V_B_Date DATE;found CHAR(1):=‘F’;F_ID NUMBER:=V_ID;
BEGINSELECT B_Date INTO V_B_Date FROM EmployeeWHERE ID=F_ID;DBMS_OUTPUT.PUT_LINE(V_B_Date);found:=‘T’;RETURN found;
EXCEPTIONWHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘No Data Found’);END Print_B_DateF;/
15
Calling a Function:
SELECT Print_B_DateF(102) FROM DUAL;
16
Dropping Function
DROP FUNCTION Print_B_DateF;
17
Find the largest ValueDECLARE –--p1, p2, p3, p4
large NUMBER;BEGIN
large:=p1;IF large< p2 THEN large:=p2; END IF;IF large< p3 THEN large:=p3; END IF;IF large< p4 THEN large:=p4; END IF;
END;/
18
PACKAGESDBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE ('Display This’);
19
PACKAGE HEADER (Specification)CREATE [ OR REPLACE] PACKAGE p_name IS
|AS-- functions-- procedures-- variables-- constants -- exceptions-- cursors
END [p_name ];
20
EXAMPLECREATE PACKAGE myPackage AS
PROCEDURE PrintLarge (P1 NUMBER, p2 NUMBER);
FUNCTION FindLarge (P1 NUMBER, P2 NUMBER) RETURN NUMBER;
END myPackage;
21
PACKAGE BODYCREATE OR REPLACE PACKAGE BODY
p_name IS|AS--package body
End p_name;
22
EXAMPLECREATE OR REPLACE PACKAGE BODY MyPackage AS
PROCEDURE PrintLarge (P1 NUMBER, p2 NUMBER) ASBEGIN IF p1> p2 THEN
DBMS_OUTPUT.PUT_LINE(p1); ELSE
DBMS_OUTPUT.PUT_LINE(p2); END IF;
END PrintLarge;FUNCTION FindLarge (P1 NUMBER, P2 NUMBER) RETURN NUMBER AS
large NUMBER;BEGIN IF p1> p2 THEN
LARGE:=p1; ELSE
LARGE:=p2; END IF;
RETURN LARGE;END ;
END myPackage;23
Call Elements of Package:EXEC MyPackage.PrintLarge (32 , 11);
SELECT MyPackage.FindLarge( 22 , 43)
FROM DUAL;
24
EXAMPLE 2CREATE OR REPLACE PACKAGE Employee_p
ASFUNCTION E_Full_Name (Last_N testdata.employee.L_name%TYPE,
First_N testdata.employee.F_name%TYPE) RETURN VARCHAR2;
FUNCTION E_Name(E_id testdata.employee.id%TYPE) RETURN VARCHAR2;
END Employee_p;
25
EXAMPLE 2CREATE OR REPLACE PACKAGE BODY
Employee_P ASFUNCTION E_Full_Name
(Last_N Employee.L_name%TYPE, First_N Employee.F_name%TYPE)RETURN VARCHAR2 IS
BEGINRETURN Last_N || ‘, ‘ || First_N;
END;
26
EXAMPLE 2FUNCTION E_Name(f_id EMPLOYEE.id%TYPE)
RETURN VARCHAR2 IStemp VARCHAR2(200);id EMPLOYEE.id%TYPE:=f_id;
BEGINSELECT (L_name || ‘ ‘ ||F_Name) INTO tempFROM employee WHERE employee.id = id;RETURN temp;
EXCEPTIONWHEN NO_DATA_FOUND THEN
RETURN NULL;WHEN TOO_MANY_ROWS THEN
…..END;
END Employee_P;27
CALL FUNCTIONS of PACKAGESELECT Employee_p.E_NAME(107)FROM DUAL;
28
29
Subprogram LocationUSER_OBJECTSUSER_SOURCEUSER_ERRORS
SELECT OBJECT_NAME, OBJECT_TYPE, STATUSFROM USER_OBJECTSWHERE OBJECT_NAME = ‘PrintInfo’;
OBJECT_NAME OBJECT_TYPE STATUS
SIMPLE PROCEDURE VALID
30
Subprogram LocationSELECT TEXTFROM USER_SOURCEWHERE NAME = ‘PrintInfo’ AND TYPE= ‘PROCEDURE’
ORDER BY line;
TEXT-----------------------------------------
CREATE OR REPLACE PROCEDURE PrintInfo ASss NUMBER:=24;
BEGINDBMS_OUTPUT.PUT_LINE(ss);
END PrintInfo;
31
Find Errors:SHOW ERRORS;
-Line number of the error-Column number of the error-Text message of the error
SELECT line, position, textFROM USER_ERRORSWHERE name=‘PrintInfo’ AND
TYPE=‘PROCEDURE’;
Exception HandlingCREATE FUNCTION Employee_P (f_id EMPLOYEE.id%TYPE)
RETURN VARCHAR2 IStemp VARCHAR2(200);id EMPLOYEE.id%TYPE:=f_id;
BEGINSELECT (L_name || ‘ ‘ ||F_Name) INTO tempFROM employee WHERE employee.id = id;RETURN temp;
EXCEPTIONWHEN NO_DATA_FOUND THENRETURN NULL;WHEN TOO_MANY_ROWS THEN
INSERT INTO errorsVALUES (‘Error in statement ‘); RETURN NULL;
END Employee_P;32
33
DECLARE
BEGINEXCEPTIONWHEN ZERO_DIVIDE THEN
INSERT INTO table1(info)VALUES (info_data);COMMIT;
WHEN OTHERS THENROLLBACK;
END;
Exception Handling
34
Exception Types:1. Predefined Oracle Server errors:
No declaration is neededORA-01403 NO_DATA_FOUNDORA-01422 TOO_MANY_ROWSORA-01476 ZERO_DIVIDEORA-06500 STORAGE_ERRORORA-06530 ACCESS_INTO_NULLORA-06592 CASE_NOT_FOUNDORA-00001 DUP_VAL_ON_INDEX
35
Exception Types:2. User_defined
User determines an abnormal condition Declared in declaration section
DECLAREe_TooManyNumbers EXCEPTION;
36
Raising USER_DEFINED ExceptionsExample
DECLAREe_TooManyNumbers EXCEPTION;V_NoStudent NUMBER(4);V_MaxStudent NUMBER(4);
BEGINSELECT Current_Students, Max_StudentsINTO V_NoStudent, V_MaxStudentFROM classesWHERE C_Num=455 AND Dept=‘ITEC’;IF V_NoStudent > V_MaxStudent THEN
RAISE e_TooManyNumbers;END IF;
Chapter 18: Exception Handling 37
EXCEPTIONWHEN e_TooManyNumbers THEN
INSERT INTO log_file (info)VALUES (‘ITEC455 has:‘ || V_NoStudent || ‘Max No
is:’ || V_MaxStudent);
END;