728x90
-- PL/SQL 에서 사용하는 않는 CURSOR 는 수행 된다 ? 안된다 ? 주석 처리 하기 전에 확인
-- ( 결과 ) CURSOR 를 선언만 하고, 사용하지 않아도, CURSOR 관련 SQL(일)을 수행 하게 된다.
-- 사용하지 않는 커서는 제거 혹은 주석 처리라도하자.
-- grant select on sys.DBA_OBJECTS to scott ; -- run by sys
CREATE OR REPLACE PROCEDURE UPDATE_SAL2
/* IN Parameter */
(v_empno IN NUMBER)
IS
V_OBJECT_NAME VARCHAR2(100);
C_LIST SYS_REFCURSOR;
BEGIN
OPEN C_LIST FOR SELECT /*+ UNUSED_CURSOR */ OBJECT_NAME FROM DBA_OBJECTS ;
UPDATE /*+ TG_UPDATE_FLAG2 */ emp
SET sal = sal * 1.1
WHERE empno = v_empno;
COMMIT;
END UPDATE_SAL2;
SELECT * FROM EMP ;
EXEC UPDATE_SAL2(7934);
SQL> SELECT SQL_ID, EXECUTIONS, FIRST_LOAD_TIME, SQL_TEXT
FROM GV$SQLAREA
WHERE PROGRAM_ID = ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME ='UPDATE_SAL2');
SQL_ID EXECUTIONS FIRST_LOAD_TIME SQL_TEXT
------------- ----------- ---------------------- -------------------------------------------------------------------------
6k4hmfmz6npq0 1 2023-04-01/14:07:24 SELECT /*+ UNUSED_CURSOR */ OBJECT_NAME FROM DBA_OBJECTS
1f8vwm03k3hkt 1 2023-04-01/14:07:24 UPDATE /*+ TG_UPDATE_FLAG2 */ EMP SET SAL = SAL * 1.1 WHERE EMPNO = :B1
2 rows selected.