Oracle/Oh Oracle

PL/SQL 에서 사용하는 않는 CURSOR 는 수행 된다 ? 안된다 ?

darkturtle26 2023. 4. 1. 14:10


-- 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.