안녕하세요.
자율적 트랜잭션을 이용하여 채번함수를 만들려고 하는데 컴파일 오류가 발생하여 여러 고수님들께 문의 드립니다.
아래는 문의를 위해 간단하게 작성한 함수 소스입니다.
CREATE OR REPLACE FUNCTION FN_TEST (P_NBR_ID IN VARCHAR2)
RETURN NUMBER
IS
V_NOW_SN NUMBER(9);
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
SELECT NVL(NOW_SN, 0)
INTO V_NOW_SN
FROM TCO_CF_NBR
WHERE NBR_ID = P_NBR_ID
FOR UPDATE;
V_NOW_SN := V_NOW_SN + 1;
UPDATE TCO_CF_NBR
SET NOW_SN = V_NOW_SN
WHERE NBR_ID = P_NBR_ID;
COMMIT;
RETURN V_NOW_SN;
END;
위의 함수를 컴파일하면 다음과 같이 부적합한 식별자라고 오류가 발생됩니다.
ORA-06550: 줄 5, 열18:PL/SQL: ORA-00904: "P_NBR_ID": 부적합한 식별자
ORA-06550: 줄 2, 열2:PL/SQL: SQL Statement ignored
ORA-06550: 줄 8, 열2:PLS-00201: 'V_NOW_SN' 식별자가 정의되어야 합니다
ORA-06550: 줄 8, 열2:PL/SQL: Statement ignored
ORA-06550: 줄 12, 열18:PL/SQL: ORA-00904: "P_NBR_ID": 부적합한 식별자
ORA-06550: 줄 10, 열2:PL/SQL: SQL Statement ignored
ORA-06550: 줄 16, 열2:PLS-00372: 프로시저, RETURN 문에 이 식을 나타날 수 없습니다
ORA-06550: 줄 16, 열2:PL/SQL: Statement ignored
procedure로 변경해 보아도 동일한 오류가 발생하며,
procedure에서는 PRAGMA AUTONOMOUS_TRANSACTION; 문장만 제외하면 잘 동작하고 있습니다.
참고로 Database 환경은 다음과 같습니다.
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
여러곳을 검색해 보아도 문제점을 찾을 수가 없어서 문의 드립니다.
감사합니다.
|