PL/SQL에서 PLS-00323: subprogram is declared in a package specification and must be defined in the package body 오류가 발생하는 경우, 패키지 지정(Specification)에는 선언되었지만 패키지 본체(Body)에는 해당 서브프로그램이 정의되지 않았을 가능성이 큽니다. 혹은 그 반대의 경우도 생각할 수 있어요.
해결 방법
-
패키지 스펙(Package Specification) 확인
- 서브프로그램이 선언되어 있는지 확인합니다.
위 코드에서CREATE OR REPLACE PACKAGE my_package AS PROCEDURE my_procedure; END my_package; /my_procedure가 선언되었습니다. -
패키지 바디(Package Body) 확인
- 패키지 본문에 해당 서브프로그램이 정의되어 있는지 확인합니다.
만약 패키지 바디에서CREATE OR REPLACE PACKAGE BODY my_package AS PROCEDURE my_procedure IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello, world!'); END my_procedure; END my_package; /my_procedure가 정의되지 않았다면 오류가 발생한답니다. -
서브프로그램이 빠진 경우 추가
- 패키지 스펙에서 선언된 서브프로그램이 패키지 바디에서 누락되지 않았는지 확인하고, 없다면 추가해야 합니다.
-
정의가 잘못된 경우 수정
- 패키지 스펙과 패키지 바디에서 서브프로그램의 매개변수 및 반환 타입이 일치하는지 확인해야 합니다.
- 예를 들어, 스펙에서는 매개변수가 없는데 바디에서는 매개변수를 추가했다면 오류가 발생할 수 있습니다.
패키지 스펙과 바디가 서로 일치하도록 수정하면 오류를 해결할 수 있을 겁니다~ 🚀
