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>