0% found this document useful (0 votes)
2 views23 pages

4 Oracle PLSQL Part2 m4 Slides

The document outlines how to pass parameters in procedures and functions, detailing parameter modes such as IN, OUT, and IN OUT. It explains the differences between formal and actual parameters, as well as the implications of using default values and constraints. Additionally, it covers various notations for passing parameters, including positional, named, and mixed notations.

Uploaded by

codingera.ai
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views23 pages

4 Oracle PLSQL Part2 m4 Slides

The document outlines how to pass parameters in procedures and functions, detailing parameter modes such as IN, OUT, and IN OUT. It explains the differences between formal and actual parameters, as well as the implications of using default values and constraints. Additionally, it covers various notations for passing parameters, including positional, named, and mixed notations.

Uploaded by

codingera.ai
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

Parameters in Procedures & Functions

!!

Pankaj Jain
!
@twit_pankajj
How to Pass Parameters?

!
[schema.]<function_or_procedure_name> (parameter1,….parameterN)
!

<param_name> <param_mode><param_datatype> {:= | DEFAULT} def_val

!
CREATE OR REPLACE FUNCTION get_tier(p_salary IN NUMBER) RETURN NUMBER IS

Do Not Place Anything in


This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Parameter Modes

IN OUT IN OUT

▪ Multiple

▪ Overloading

Do Not Place Anything in


This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Formal vs Actual Parameters

▪ Formal
□ Declared in Subprogram Specification

□ No Constraints Specified

!
CREATE OR REPLACE PROCEDURE update_emp(p_dept_name IN VARCHAR2) RETURN NUMBER IS

!
CREATE OR REPLACE PROCEDURE update_emp(p_dept_name IN employee.emp_dept_id%TYPE)
RETURN NUMBER IS
!
▪ Actual
□ Variable or Expression Passed from Calling Client

! DECLARE
l_dept_name VARCHAR2(60):= 'IT'; Do Not Place Anything in
BEGIN This Space
! update_emp(l_dept_name); (Add watermark during editing)
Note: Warning will not appear
END;
during Slide Show view.
IN Mode
!
▪ Default Mode CREATE OR REPLACE
FUNCTION update_emp( p_emp_id IN NUMBER,
p_dept_name VARCHAR2)
▪ Read Only RETURN NUMBER AS
CURSOR cur_get_dept_id IS
DECLARE SELECT dept_id
l_emp_id NUMBER(10) := 50; FROM departments
l_dept_name VARCHAR2(60):= 'IT'; WHERE dept_name = p_dept_name;
l_status NUMBER; l_dept_id departments.dept_id%TYPE;
BEGIN BEGIN
p_emp_id := 20;
l_status := update_emp(l_emp_id,
l_dept_name); OPEN cur_get_dept_id;
END; FETCH cur_get_dept_id INTO l_dept_id;
CLOSE cur_get_dept_id;
UPDATE employee
DECLARE SET emp_dept_id = l_dept_id
l_status NUMBER; WHERE emp_id = p_emp_id;
BEGIN COMMIT;
l_status := update_emp(50, RETURN 1;
'IT' ); EXCEPTION
END; WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM); Do Not Place Anything in
ROLLBACK; This Space
RETURN 0; (Add watermark during editing)
END update_emp; Note: Warning will not appear
during Slide Show view.
Actual Parameter Value Ignored
!
OUT Mode Read & Write
!
Cannot Pass Literals or Constants

Do Not Place Anything in


This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
OUT Mode

CREATE OR REPLACE
FUNCTION update_emp( p_emp_id IN NUMBER,
DECLARE p_dept_id NUMBER,
l_emp_id NUMBER(10) := 50; p_location OUT VARCHAR2)
l_dept_id NUMBER := 1; RETURN NUMBER AS
l_location VARCHAR2(10) :='CA'; BEGIN
l_status NUMBER; DBMS_OUTPUT.PUT_LINE('Location Initially '||p_location);
BEGIN UPDATE employee
l_status := update_emp(l_emp_id, SET emp_dept_id = p_dept_id
l_dept_id, WHERE emp_id = p_emp_id
'CA' l_location ); RETURNING emp_loc INTO p_location;
DBMS_OUTPUT.PUT_LINE('Location '||l_location); COMMIT;
DBMS_OUTPUT.PUT_LINE('Status '||l_status); RETURN 1;
END; EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
Location Initially DBMS_OUTPUT.PUT_LINE(
Location WA DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
Status 1 ROLLBACK;
RETURN 0;
END update_emp; Do Not Place Anything in
This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
IN OUT Mode

Actual Parameter Read & Write Cannot be a Literal


Value Passed or a Constant

Do Not Place Anything in


This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
IN OUT Mode

CREATE OR REPLACE
PROCEDURE update_emp( p_emp_id IN NUMBER,
p_dept_id NUMBER,
DECLARE
p_location OUT VARCHAR2,
l_emp_id NUMBER(10) := 50;
p_status IN OUT NUMBER) AS
l_dept_id NUMBER := 1;
BEGIN
l_location VARCHAR2(10) :='CA';
DBMS_OUTPUT.PUT_LINE('p_status Initially '|| p_status);
l_status NUMBER := -1;
UPDATE employee
BEGIN
SET emp_dept_id = p_dept_id
update_emp(l_emp_id,
WHERE emp_id = p_emp_id
l_dept_id,
RETURNING emp_loc INTO p_location;
l_location,
p_status := 1;
l_status);
COMMIT;
DBMS_OUTPUT.PUT_LINE(l_location);
EXCEPTION
DBMS_OUTPUT.PUT_LINE(l_status);
WHEN OTHERS THEN
END;
DBMS_OUTPUT.PUT_LINE(SQLERRM);
DBMS_OUTPUT.PUT_LINE(
p_status Initially -1 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
Location WA ROLLBACK;
Status 1 p_status := 0;
END update_emp; Do Not Place Anything in
This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Exception Inside Stored Subprogram

▪ Passed by Reference
CREATE OR REPLACE
□ IN PROCEDURE update_emp( p_emp_id IN NUMBER,
p_dept_id NUMBER,
p_location OUT VARCHAR2,
▪ Passed by Value p_status IN OUT NUMBER) AS
l_number NUMBER;
□ OUT & IN OUT BEGIN
UPDATE employee
DECLARE SET emp_dept_id = p_dept_id
l_emp_id NUMBER(10) := 50; WHERE emp_id = p_emp_id
l_dept_id NUMBER := 1; RETURNING emp_loc INTO p_location;
l_location VARCHAR2(10) :='CA'; p_status := 1;
l_status NUMBER := -1; l_number := 'CHAR';
BEGIN COMMIT;
update_emp(l_emp_id, EXCEPTION
l_dept_id, WHEN OTHERS THEN
l_location, DBMS_OUTPUT.PUT_LINE(SQLERRM);
l_status); DBMS_OUTPUT.PUT_LINE(
DBMS_OUTPUT.PUT_LINE(l_location); DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
DBMS_OUTPUT.PUT_LINE(l_status); ROLLBACK;
END; p_status := 0; Do Not Place Anything in
! p_location := null; This Space
(Add watermark during editing)
END update_emp;
WA Note: Warning will not appear
0 during Slide Show view.
Exception Inside Stored Subprogram

CREATE OR REPLACE
PROCEDURE update_emp( p_emp_id IN NUMBER,
DECLARE p_dept_id NUMBER,
l_emp_id NUMBER(10) := 50; p_location OUT VARCHAR2,
l_dept_id NUMBER := 1; p_status IN OUT NUMBER) AS
l_location VARCHAR2(10) :='CA'; l_number NUMBER;
l_status NUMBER := -1; BEGIN
BEGIN UPDATE employee
update_emp(l_emp_id, SET emp_dept_id = p_dept_id
l_dept_id, WHERE emp_id = p_emp_id
l_location, RETURNING emp_loc INTO p_location;
l_status); p_status := 1;
EXCEPTION l_number := 'CHAR';
WHEN OTHERS THEN COMMIT;
DBMS_OUTPUT.PUT_LINE(SQLERRM); EXCEPTION
DBMS_OUTPUT.PUT_LINE(l_location); WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(l_status); DBMS_OUTPUT.PUT_LINE(SQLERRM);
END; DBMS_OUTPUT.PUT_LINE(
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
ROLLBACK;
RAISE; Do Not Place Anything in
CA END update_emp; This Space
-1 (Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
NOCOPY Hint

<parameter_name> <parameter_mode> NOCOPY <parameter_datatype>

CREATE OR REPLACE
PROCEDURE update_emp( p_emp_id IN NUMBER,
p_dept_id NUMBER,
p_location OUT NOCOPY VARCHAR2,
DECLARE p_status IN OUT NOCOPY NUMBER)
l_emp_id NUMBER(10) := 50; AS
l_dept_id NUMBER := 1; l_number NUMBER;
l_location VARCHAR2(10) :='CA'; BEGIN
l_status NUMBER := -1; UPDATE employee
BEGIN SET emp_dept_id = p_dept_id
update_emp(l_emp_id, WHERE emp_id = p_emp_id
l_dept_id, RETURNING emp_loc INTO p_location;
l_location, p_status := 1;
l_status); l_number := 'CHAR';
EXCEPTION COMMIT;
WHEN OTHERS THEN EXCEPTION
DBMS_OUTPUT.PUT_LINE(SQLERRM); WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(l_location); DBMS_OUTPUT.PUT_LINE(SQLERRM);
DBMS_OUTPUT.PUT_LINE(l_status); DBMS_OUTPUT.PUT_LINE(
END; Do Not Place Anything in
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
This Space
ROLLBACK; (Add watermark during editing)
WA RAISE; Note: Warning will not appear
1 END update_emp; during Slide Show view.
NoCopy Restrictions

Scalar Datatype with Scalar Numeric with


Implicit Conversions
NOT NULL Constraint Constraints

Records with Different Elements of a Remote Procedure


Field Constraints Collection Calls

Do Not Place Anything in


This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Positional Notation

▪ Parameters Passed by Position

▪ Compact

▪ Not Affected by Renaming of Formal Parameters

▪ Affected by Repositioning of Formal Parameters

DECLARE
l_emp_id NUMBER(10) := 50;
l_dept_id NUMBER := 1;
l_location VARCHAR2(10) :='CA';
l_status NUMBER := -1;
CREATE OR REPLACE PROCEDURE BEGIN
update_emp( p_emp_id IN NUMBER, update_emp(l_emp_id,
p_dept_id NUMBER, l_dept_id,
p_location OUT VARCHAR2, l_location,
p_status IN OUT NUMBER) l_status);
……. END;
…….. Do Not Place Anything in
This Space
END update_emp;
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Named Notation

▪ Parameters Passed by Names

▪ Verbose

▪ Not Affected by Repositioning of Formal Parameters

▪ Flexibility for Passing Default Values

▪ Affected by Renaming of Formal Parameters


DECLARE
l_emp_id NUMBER(10) := 50;
CREATE OR REPLACE PROCEDURE l_bonus
update_emp( p_emp_id IN NUMBER, l_dept_id NUMBER := 1;
p_dept_id NUMBER, l_location VARCHAR2(10) :='CA';
p_location OUT VARCHAR2, l_status NUMBER := -1;
p_status IN OUT NUMBER) BEGIN
……. update_emp(p_location => l_location,
…….. p_emp_id => l_emp_id,
Do Not Place Anything in
END update_emp; p_status => l_status,
This Space
p_dept_id => l_dept_id);
(Add watermark during editing)
END; Note: Warning will not appear
during Slide Show view.
Mixed Notation

▪ Positional Parameters First


CREATE OR REPLACE PROCEDURE
update_emp( p_emp_id IN NUMBER,
p_dept_id NUMBER,
p_location OUT VARCHAR2,
p_status IN OUT NUMBER)
…….
……..
END update_emp;

DECLARE DECLARE
l_emp_id NUMBER(10) := 50; l_emp_id NUMBER(10) := 50;
l_dept_id NUMBER := 1; l_dept_id NUMBER := 1;
l_location VARCHAR2(10) :='CA'; l_location VARCHAR2(10) :='CA';
l_status NUMBER := -1; l_status NUMBER := -1;
BEGIN BEGIN
update_emp(l_emp_id, update_emp(p_emp_id => l_emp_id,
l_dept_id, p_dept_id => l_dept_id,
p_status => l_status, l_status,
p_location => l_location); l_location);
END; END;
Do Not Place Anything in
This Space
(Add watermark during editing)
PLS-00312: Note: association
a positional parameter association may not follow a named Warning will not appear
during Slide Show view.
Default Values

!
<param_name> <param_mode><param_datatype> {:= | DEFAULT} def_val
!
CREATE OR REPLACE PROCEDURE
▪ IN Mode update_info ( p_emp_id IN NUMBER DEFAULT 50,
p_dept_id IN NUMBER DEFAULT 1,
p_bonus IN NUMBER DEFAULT 10)
…….
……..
END update_info;

DECLARE
l_emp_id NUMBER(10) := 30;
l_dept_id NUMBER := 2; DECLARE
BEGIN l_emp_id NUMBER(10) := 30;
l_bonus NUMBER := 5;
update_info; BEGIN
BEGIN
END; update_info(l_emp_id);
update_info(l_emp_id,
l_dept_id, END;
l_bonus);
Do Not Place Anything in
END; This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Default Values

CREATE OR REPLACE PROCEDURE


update_emp( p_emp_id IN NUMBER ,
p_dept_id IN NUMBER DEFAULT 1,
p_bonus IN NUMBER DEFAULT 10)
…….
……..
END update_emp;

DECLARE
l_emp_id NUMBER(10) := 30;
BEGIN
update_emp(l_emp_id);
END;

DECLARE DECLARE
l_emp_id NUMBER(10) := 30; l_emp_id NUMBER(10) := 30;
l_dept_id NUMBER := 2; l_dept_id NUMBER := 2;
l_bonus NUMBER := 5; l_bonus NUMBER := 5;
BEGIN BEGIN Do Not Place Anything in
update_emp(l_emp_id, update_emp(p_emp_id => l_emp_id,
This Space
l_bonus); p_bonus => l_bonus);
(Add watermark during editing)
END; END; Note: Warning will not appear
during Slide Show view.
Constraints on Formal Parameters

▪ Acquires from Actual Parameter


DECLARE
l_emp_id NUMBER(10) := 50;
l_location VARCHAR2(6) NOT NULL :='INIT';
BEGIN
get_emp_loc(l_emp_id,
l_location);
END;

CREATE OR REPLACE
PROCEDURE get_emp_loc ( p_emp_id IN NUMBER ,
p_location OUT VARCHAR2) AS
CURSOR get_loc IS
SELECT emp_loc
FROM employee
WHERE emp_id = p_emp_id;
BEGIN
p_location := 'NONE';
OPEN get_loc;
FETCH get_loc INTO p_location;
CLOSE get_loc; Do Not Place Anything in
! This Space
! p_location := NULL; (Add watermark during editing)
Note: Warning will not appear
END get_emp_loc; during Slide Show view.
Constraints on Formal Parameters

▪ Acquires from %TYPE


CREATE TABLE employee
DECLARE (emp_id NUMBER NOT NULL PRIMARY KEY,
l_emp_id NUMBER(10) := 50; emp_name VARCHAR2(60),
l_location VARCHAR2(6) ; emp_dept_id NUMBER ,
BEGIN emp_loc VARCHAR2(2),
get_emp_loc(l_emp_id, emp_sal NUMBER,
l_location); CONSTRAINT emp_dept_fk FOREIGN KEY(emp_dept_id)
END; REFERENCES departments(dept_id));

CREATE OR REPLACE
PROCEDURE get_emp_loc ( p_emp_id IN employee.emp_id%TYPE ,
p_location OUT employee.emp_loc%TYPE) AS
CURSOR get_loc IS
SELECT emp_loc
FROM employee
WHERE emp_id = p_emp_id;
BEGIN
p_location := 'NONE';
OPEN get_loc; Do Not Place Anything in
FETCH get_loc INTO p_location; This Space
CLOSE get_loc; (Add watermark during editing)
END get_emp_loc; Note: Warning will not appear
during Slide Show view.
Constraints on Formal Parameters

▪ Numeric Subtypes
□ NOT NULL Constraint Inherited

□ Only Range Inherited for Numeric Base Type

DECLARE
SUBTYPE numsubtype IS NUMBER(2) NOT NULL;
!
PROCEDURE testsubtype ( p_num IN numsubtype ) AS
BEGIN
DBMS_OUTPUT.PUT_LINE(p_num);
END testsubtype;
!
BEGIN
testsubtype(1234);
testsubtype(NULL);
END;

Do Not Place Anything in


PLS-00567: cannot pass NULL to a NOT NULL constrained formal This Space
parameter (Add watermark during editing)
Note: Warning will not appear
during Slide Show view.
Constraints on Formal Parameters

▪ Character Subtypes
□ NOT NULL Constraint Inherited

□ Size Not Inherited


DECLARE
SUBTYPE charsubtype IS VARCHAR2(2) NOT NULL;
!
PROCEDURE testsubtype ( p_char IN charsubtype ) AS
BEGIN
DBMS_OUTPUT.PUT_LINE(p_char);
END testsubtype;
!
BEGIN
testsubtype('TEST');
testsubtype(NULL);
END;

TEST
Do Not Place Anything in
This Space
PLS-00567: cannot pass NULL to a NOT NULL constrained formal (Add watermark during editing)
Note: Warning will not appear
parameter during Slide Show view.
Need for Parameters
!
Parameter Modes
!
Summary Passing by Reference and Value
!
Positional & Named Notation
!
Default Values & Parameter Constraints

Do Not Place Anything in


This Space
(Add watermark during editing)
Note: Warning will not appear
during Slide Show view.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy