Getting error while Executing Package(执行包时出错)
问题描述
表格结构:
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;
在上面执行时出现以下错误
while executing above I'm getting following error
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.
推荐答案
您缺少包的声明.这个想法是将包的声明(标题",如果你愿意的话)分开,以便其他包/过程/函数可以从主体(实现)中针对它进行编译.
You're missing the declaration of the package. The idea is to separate the declaration of the package ("the header", if you will), so other packages/procedures/functions can compile against it from the body (the implementation).
在你的情况下,你需要这样的东西:
In your case, you'd need something like:
CREATE OR REPLACE package salary_sal AS
PROCEDURE find_sal(c_dpt_no salary.dpt_no%TYPE);
END salary_sal;
现在,一旦包被声明,你就可以创建它的主体:
Now, once the package is declared, you can create its body:
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;
这篇关于执行包时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:执行包时出错
基础教程推荐
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 无法解决整理冲突 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
