오라클 동적 쿼리시 %rowtype 바인딩 변수 에러 0 1 2,288

by Felix [PL/SQL] execute immediate 동적쿼리 오라클 oracle rowtype dinamic [2021.03.02 17:45:41]


안녕하세요.

다름이 아니라 %rowtype을 동적 쿼리에 바인딩 변수로 할당해주는데 에러가 납니다.
하지만 ROW_EMP.EMPNO 처럼 컬럼명을 직접 넣어주면 정상 처리됩니다.
원인이 궁금합니다. 이런 방법을 이용해서 처리할려는 로직이 있는데 샘플 테스트 중 시작부터 막히네요.

혹시 rowtype을 바인딩 변수로 사용하시는 분은 안 계신가요?

---------------------------------------------------------------
DECLARE
  ROW_EMP EMP%ROWTYPE;
  V_STMT  VARCHAR2(1000);
BEGIN
  ROW_EMP.EMPNO := 1234;
  DBMS_OUTPUT.put_line ('--1 ROW_EMP.EMPNO ('||ROW_EMP.EMPNO||')');
    
  V_STMT := 'BEGIN :1 := NULL; END;';  
  EXECUTE IMMEDIATE V_STMT USING IN OUT ROW_EMP;
  DBMS_OUTPUT.put_line ('--2 ROW_EMP.EMPNO ('||ROW_EMP.EMPNO||')');
END;

SQL Error [6550] [65000]: ORA-06550: line 9, column 41:
PLS-00457: expressions have to be of SQL types
ORA-06550: line 9, column 3:
PL/SQL: Statement ignored

---------------------------------------------------------------
DECLARE
  ROW_EMP EMP%ROWTYPE;
  V_STMT  VARCHAR2(1000);
BEGIN
  ROW_EMP.EMPNO := 1234;
  DBMS_OUTPUT.put_line ('--1 ROW_EMP.EMPNO ('||ROW_EMP.EMPNO||')');
    
  V_STMT := 'BEGIN :1 := NULL; END;';  
  EXECUTE IMMEDIATE V_STMT USING IN OUT ROW_EMP.EMPNO;
  DBMS_OUTPUT.put_line ('--2 ROW_EMP.EMPNO ('||ROW_EMP.EMPNO||')');
END;

--1 ROW_EMP.EMPNO (1234)
--2 ROW_EMP.EMPNO ()

 

by Felix [2021.03.03 11:06:04]

오라클 버전은 Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입