oracle - 执行包时出现错误

标签 oracle stored-procedures plsql syntax-error

表结构:

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.

最佳答案

您缺少包裹声明。这个想法是分离包的声明(“头”,如果你愿意的话),这样其他包/过程/函数就可以从主体(实现)中对其进行编译。

就您而言,您需要类似的东西:

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;

关于oracle - 执行包时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20280148/

相关文章:

oracle - Oracle "pl/sql"集合是按值分配还是按引用分配?

sql - 在多个 Oracle 服务器上运行相同的 sql 查询和聚合结果的工具

mysql - 无法调用存储过程

mysql - 找出此存储过程中的语法错误

sql - SQL开发人员错误,字符无效。创建Youtube数据库

Mysql - 过程中的 IN 子句用于在过程中声明游标

windows - 如何通过命令行将参数传递给sql脚本

mysql - 当函数返回嵌套表时在选择查询中调用 PLSQL 函数时出现问题

oracle - 即使 PL/SQL 过程引发错误,仍可以写入 OUT 参数值吗?

oracle - oracle中调用存储过程的语法是什么