오라클 데이터베이스를 사용하다 보면 종종 마주치는 에러 중 하나가 바로 ORA-06512입니다.
이 오류는 프로시저, 함수, 트리거 등 PL/SQL 블록이 연관된 작업 중에 발생하는 경우가 많습니다.
하지만 ORA-06512 자체는 '문제 그 자체'가 아니라
**"문제가 발생한 위치를 알려주는 힌트"**입니다.
이번 글에서는 ORA-06512 오류의 의미, 주요 발생 원인,
그리고 트리거, 프로시저 디버깅 방법까지 체계적으로 정리해드리겠습니다.
PL/SQL 오류 해결에 어려움을 느끼셨다면 꼭 참고해보세요!
📋 ORA-06512 오류란?
ORA-06512: at "오브젝트명", line 라인번호
뜻:
오라클은 SQL 실행 중 에러가 발생하면,
어떤 오브젝트(프로시저, 함수, 트리거 등)의 몇 번째 줄에서 문제가 생겼는지 알려줍니다.
✔️ 즉, ORA-06512는 에러를 발생시킨 "위치 정보"를 알려주는 메시지입니다.
✔️ 실제 문제는 ORA-06512와 함께 출력된 다른 에러(예: ORA-01403, ORA-06502 등)에 숨어 있습니다.
🔥 ORA-06512 주요 발생 패턴
패턴 설명
트리거 안에서 오류 발생 | DML 작업(INSERT, UPDATE, DELETE) 중 트리거 내부 로직 문제 |
프로시저/함수 안에서 오류 발생 | 잘못된 데이터 타입, NULL 처리 실패, 예외처리 미흡 등 |
중첩된 호출(Procedure → Function) | 호출 체인 중간 단계에서 발생 |
사용자 정의 예외(RAISE) | 의도적으로 예외를 발생시킨 경우에도 뜰 수 있음 |
🛠 ORA-06512 오류 디버깅 방법
✅ 1. 오류 메시지 전체를 주의 깊게 읽어보세요
- ORA-06512은 단순히 위치만 알려줍니다.
- 진짜 원인은 함께 출력된 다른 에러 코드에 있습니다.
예시:
ORA-01403: no data found ORA-06512: at "SCHEMA.PROC_UPDATE_SALARY", line 15
✔️ 이 경우 핵심 문제는 데이터 없음(ORA-01403) 이고,
✔️ 15번째 줄에서 오류가 발생했다는 뜻입니다.
✅ 2. 문제가 발생한 라인번호 근처를 분석하세요
- line 15라면 15번 줄 직전과 직후 코드를 집중적으로 살펴보세요.
- 잘못된 변수 사용, SELECT 결과 없음, 타입 불일치가 흔한 원인입니다.
✅ 3. 트리거 디버깅할 때는 DML 문장 확인
- 트리거는 자동으로 발동되기 때문에
- 어떤 INSERT/UPDATE/DELETE가 트리거를 호출했는지 찾아야 합니다.
트리거 안에서 :NEW, :OLD 값 참조할 때 에러가 많습니다.
✅ 4. EXCEPTION 블록 활용하기
- 프로시저/트리거에 EXCEPTION 블록을 추가하면,
- 오류 발생 시 에러 메시지를 출력하게 할 수 있습니다.
BEGIN
-- 주요 로직
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('에러 발생: ' || SQLERRM);
RAISE;
END;
✅ 이렇게 하면 에러 메시지를 더 자세히 알 수 있습니다.
✅ 5. SQL Developer에서 디버깅 모드 사용
- SQL Developer나 TOAD 같은 툴은
PL/SQL 디버깅 기능을 제공합니다. - 브레이크 포인트를 걸고 변수 값을 확인하면서 문제를 찾을 수 있습니다.
🎯 트리거/프로시저별 자주 발생하는 에러 예시
오브젝트 흔한 에러
트리거 | :NEW, :OLD 잘못 참조, NULL 처리 오류 |
프로시저 | SELECT INTO 결과 없음, 타입 불일치 |
함수 | NULL 처리 누락, RETURN 타입 미스매치 |
복합 호출 (Procedure → Function) | 호출 체인 중간 에러 전파 |
📝 결론
ORA-06512 오류 자체는
오류의 원인이 아니라, "어디서" 문제가 생겼는지를 알려주는 좌표입니다.
✔️ 진짜 원인은 함께 출력된 다른 에러 코드(ORA-01403, ORA-06502 등)를 읽어야 합니다.
✔️ 발생한 라인 근처 코드를 꼼꼼히 살펴보고,
✔️ 필요하면 EXCEPTION 블록과 디버거를 적극 활용하세요.
차분하게 분석해나가면,
PL/SQL 오류도 더 이상 두렵지 않게 됩니다. 🛠✨