表结构:

Name       Null Type
---------- ---- ------------
DPT_NO          NUMBER
SALARY          NUMBER(10)
PERIOD          VARCHAR2(10)
START_DATE      DATE
END_DATE        DATE

包:
CREATE OR REPLACE package body salary_sal AS
   PROCEDURE find_sal(c_dpt_no salary.dpt_no%TYPE) IS
   c_sal salary.salary%TYPE;
   BEGIN
      SELECT salary INTO c_sal
      FROM salary
      WHERE c_dpt_no= 108;
      dbms_output.put_line('Salary: '|| c_sal);
   END find_sal;
END salary_sal;

在上面执行时,我得到以下错误
Error: PL/SQL: Compilation unit analysis terminated
Error(1,14): PLS-00201: identifier 'SALARY_SAL' must be declared
Error(1,14): PLS-00304: cannot compile body of 'SALARY_SAL' without its specification.

最佳答案

您缺少包的声明。这个想法是将包的声明(如果需要的话,称为“ header ”)分开,以便其他包/过程/函数可以从主体(实现)针对它进行编译。

在您的情况下,您将需要以下内容:

CREATE OR REPLACE package salary_sal AS
   PROCEDURE find_sal(c_dpt_no salary.dpt_no%TYPE);
END salary_sal;

现在,一旦声明了包,就可以创建它的主体:
CREATE OR REPLACE package body salary_sal AS
   PROCEDURE find_sal(c_dpt_no salary.dpt_no%TYPE) IS
   c_sal salary.salary%TYPE;
   BEGIN
      SELECT salary INTO c_sal
      FROM salary
      WHERE c_dpt_no= 108;
      dbms_output.put_line('Salary: '|| c_sal);
   END find_sal;
END salary_sal;

10-07 19:34
查看更多