Call a stored procedure in dynamic script
SQL>
SQL> CREATE TABLE place (
2 room_id NUMBER(5) PRIMARY KEY,
3 building VARCHAR2(15),
4 room_number NUMBER(4),
5 number_seats NUMBER(4),
6 description VARCHAR2(50)
7 );
Table created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20001, 'Building 7', 201, 1000, 'Large Lecture Hall');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20002, 'Building 6', 101, 500, 'Small Lecture Hall');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20003, 'Building 6', 150, 50, 'Discussion Room A');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20004, 'Building 6', 160, 50, 'Discussion Room B');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats,description)
2 VALUES (20005, 'Building 6', 170, 50, 'Discussion Room C');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20006, 'Music Building', 100, 10, 'Music Practice Room');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20007, 'Music Building', 200, 1000, 'Concert Room');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats, description)
2 VALUES (20008, 'Building 7', 300, 75, 'Discussion Room D');
1 row created.
SQL>
SQL> INSERT INTO place (room_id, building, room_number, number_seats,description)
2 VALUES (20009, 'Building 7', 310, 50, 'Discussion Room E');
1 row created.
SQL>
SQL>
SQL> CREATE TABLE lecturer (
2 id NUMBER(5) PRIMARY KEY,
3 first_name VARCHAR2(20),
4 last_name VARCHAR2(20),
5 major VARCHAR2(30),
6 current_credits NUMBER(3)
7 );
Table created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10001, 'Scott', 'Lawson','Computer Science', 11);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major, current_credits)
2 VALUES (10002, 'Mar', 'Wells','History', 4);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10003, 'Jone', 'Bliss','Computer Science', 8);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10004, 'Man', 'Kyte','Economics', 8);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10005, 'Pat', 'Poll','History', 4);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10006, 'Tim', 'Viper','History', 4);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10007, 'Barbara', 'Blues','Economics', 7);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10008, 'David', 'Large','Music', 4);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10009, 'Chris', 'Elegant','Nutrition', 8);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10010, 'Rose', 'Bond','Music', 7);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10011, 'Rita', 'Johnson','Nutrition', 8);
1 row created.
SQL>
SQL> INSERT INTO lecturer (id, first_name, last_name, major,current_credits)
2 VALUES (10012, 'Sharon', 'Clear','Computer Science', 3);
1 row created.
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE printLecturer
2 (v_Numlecturer IN OUT NUMBER) AS
3 v_LocalCount NUMBER := 0;
4 myLecturerName VARCHAR2(100);
5 CURSOR c_StudentNames IS
6 SELECT first_name || ' ' || last_name
7 FROM lecturer
8 ORDER BY ID;
9 BEGIN
10 OPEN c_StudentNames;
11 FOR v_Count IN 1..v_Numlecturer LOOP
12 FETCH c_StudentNames INTO myLecturerName;
13 IF c_StudentNames%NOTFOUND THEN
14 EXIT;
15 END IF;
16
17 DBMS_OUTPUT.PUT_LINE(' ' || myLecturername);
18 v_LocalCount := v_LocalCount + 1;
19 END LOOP;
20
21 CLOSE c_StudentNames;
22 v_Numlecturer := v_LocalCount;
23 END printLecturer;
24 /
Procedure created.
SQL>
SQL> DECLARE
2 codeBlock VARCHAR2(1000);
3
4 v_Building place.building%TYPE;
5 v_RoomNum place.room_number%TYPE;
6 v_RoomID place.room_ID%TYPE := 20006;
7 v_Numlecturer NUMBER;
8 BEGIN
9 EXECUTE IMMEDIATE
10 'DELETE FROM place WHERE room_id = :ID RETURNING building, room_number INTO :building, :room_num'
11 USING v_RoomID, OUT v_Building, OUT v_RoomNum;
12
13 DBMS_OUTPUT.PUT_LINE('Deleted Room ' || v_RoomNum || ' in ' || v_Building);
14
15 codeBlock := 'BEGIN printLecturer(:num); END;';
16
17 v_Numlecturer := 4;
18 EXECUTE IMMEDIATE codeBlock USING IN OUT v_Numlecturer;
19 DBMS_OUTPUT.PUT_LINE('Returned value is ' || v_Numlecturer);
20
21 v_Numlecturer := 20;
22 EXECUTE IMMEDIATE codeBlock USING IN OUT v_Numlecturer;
23 DBMS_OUTPUT.PUT_LINE('Returned value is ' || v_Numlecturer);
24 END;
25 /
Deleted Room 100 in Music Building
Scott Lawson
Mar Wells
Jone Bliss
Man Kyte
Returned value is 4
Scott Lawson
Mar Wells
Jone Bliss
Man Kyte
Pat Poll
Tim Viper
Barbara Blues
David Large
Chris Elegant
Rose Bond
Rita Johnson
Sharon Clear
Returned value is 12
PL/SQL procedure successfully completed.
SQL>
SQL> drop table lecturer;
Table dropped.
SQL>
SQL> drop table place;
Table dropped.
SQL>
SQL>
Related examples in the same category