表格结构:
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.
答案 0 :(得分:4)
你错过了包裹的声明。想法是分离包的声明(“标题”,如果你愿意的话),所以其他包/过程/函数可以从主体(实现)编译它。
在你的情况下,你需要像:
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;
答案 1 :(得分:0)
该包需要一个规范(即一个单独的接口定义),如错误消息所示。你必须在包体的定义之前添加一些东西(即它的实现):
CREATE OR REPLACE package salary_sal AS
PROCEDURE find_sal(c_dpt_no salary.dpt_no%TYPE);
END salary_sal;
/
答案 2 :(得分:0)
您需要创建包规范,然后才能创建包体。
您需要执行包,即在包中执行存储过程,函数等。