PLS-00323: 부프로그램 또는 커서는 패키지 지정에 정의되고 패키지 본체에 나타나야합니다 (PLS-00323: subprogram or cursor is declared in a package specification and must be defined in the package body)

PL/SQL에서 PLS-00323: subprogram is declared in a package specification and must be defined in the package body 오류가 발생하는 경우, 패키지 지정(Specification)에는 선언되었지만 패키지 본체(Body)에는 해당 서브프로그램이 정의되지 않았을 가능성이 큽니다. 혹은 그 반대의 경우도 생각할 수 있어요.

해결 방법

  1. 패키지 스펙(Package Specification) 확인
    • 서브프로그램이 선언되어 있는지 확인합니다.
    CREATE OR REPLACE PACKAGE my_package AS
        PROCEDURE my_procedure;
    END my_package;
    /
    
    위 코드에서 my_procedure가 선언되었습니다.
  2. 패키지 바디(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가 정의되지 않았다면 오류가 발생한답니다.
  3. 서브프로그램이 빠진 경우 추가
    • 패키지 스펙에서 선언된 서브프로그램이 패키지 바디에서 누락되지 않았는지 확인하고, 없다면 추가해야 합니다.
  4. 정의가 잘못된 경우 수정
    • 패키지 스펙과 패키지 바디에서 서브프로그램의 매개변수 및 반환 타입이 일치하는지 확인해야 합니다.
    • 예를 들어, 스펙에서는 매개변수가 없는데 바디에서는 매개변수를 추가했다면 오류가 발생할 수 있습니다.

패키지 스펙과 바디가 서로 일치하도록 수정하면 오류를 해결할 수 있을 겁니다~ 🚀

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗