oracle建包ORA-06550: line 1, column 7: PLS-00905: object SCOTT.SP_PACKAGE1 is inva

漠北空城 2013-12-08 04:11:36


--创建一个包(SP_PACKAGE1):包括包头和包体,名字均为包名
--创建一个包头:SP_PACKAGE1
--该包体申明有一个存储过程:UPDATESALBYNO(根据empno修改该雇员的sal)
--该包体申明有一个函数:ANNUA_INCOME(根据ename查询该雇员的年薪)
CREATE OR REPLACE PACKAGE SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER(4),EMPNUBER NUMBER(4));
FUNCTION ANNUA_INCOME(NAME VARCHAR2) RETURN NUMBER(7,2);
END;

--创建包体,即定义好在包头中申明的存储过程以及函数
CREATE OR REPLACE PACKAGE BODY SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER(4),EMPNUBER NUMBER(4)) IS
BEGIN
UPDATE EMP SET SAL = NEWSALARY WHERE EMPNO = EMPNUBER;
END;
FUNCTION ANNUA_INCOME(NAME VARCHAR2)
RETURN NUMBER(7,2) IS ANNUA_SAL NUMBER(7,2);
BEGIN
SELECT SAL*12+NVL(COMM,0) INTO ANNUA_SAL FROM EMP WHERE ENAME = NAME;
RETURN ANNUA_SAL;
END;
END;

--调用包中的存储过程
EXEC SP_PACKAGE1.UPDATESALBYNO(120,886);




怎么会报错呢?!感觉是对的啊,

PACKAGE SP_PACKAGE1 compiled
Errors: check compiler log
PACKAGE BODY SP_PACKAGE1 compiled
Errors: check compiler log
Error starting at line : 83 in command -
EXEC SP_PACKAGE1.UPDATESALBYNO(120,886)
Error report -
ORA-06550: line 1, column 7:
PLS-00905: object SCOTT.SP_PACKAGE1 is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
...全文
768 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
漠北空城 2013-12-08
  • 打赏
  • 举报
回复
引用 2 楼 zlloct 的回复:
[quote=引用 楼主 yuechang5 的回复:]


--创建一个包(SP_PACKAGE1):包括包头和包体,名字均为包名
--创建一个包头:SP_PACKAGE1
--该包体申明有一个存储过程:UPDATESALBYNO(根据empno修改该雇员的sal)
--该包体申明有一个函数:ANNUA_INCOME(根据ename查询该雇员的年薪)
CREATE OR REPLACE PACKAGE SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER(4),EMPNUBER NUMBER(4));
FUNCTION ANNUA_INCOME(NAME VARCHAR2) RETURN NUMBER(7,2);
END;

--创建包体,即定义好在包头中申明的存储过程以及函数
CREATE OR REPLACE PACKAGE BODY SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER(4),EMPNUBER NUMBER(4)) IS
BEGIN
UPDATE EMP SET SAL = NEWSALARY WHERE EMPNO = EMPNUBER;
END;
FUNCTION ANNUA_INCOME(NAME VARCHAR2)
RETURN NUMBER(7,2) IS ANNUA_SAL NUMBER(7,2);
BEGIN
SELECT SAL*12+NVL(COMM,0) INTO ANNUA_SAL FROM EMP WHERE ENAME = NAME;
RETURN ANNUA_SAL;
END;
END;

--调用包中的存储过程
EXEC SP_PACKAGE1.UPDATESALBYNO(120,886);

怎么会报错呢?!感觉是对的啊,

PACKAGE SP_PACKAGE1 compiled
Errors: check compiler log
PACKAGE BODY SP_PACKAGE1 compiled
Errors: check compiler log
Error starting at line : 83 in command -
EXEC SP_PACKAGE1.UPDATESALBYNO(120,886)
Error report -
ORA-06550: line 1, column 7:
PLS-00905: object SCOTT.SP_PACKAGE1 is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
传入参数不用指定长度吧,还有就是对不属于自己的表进行操作时最好是带上用户名前缀,如:SCOTT.EMP[/quote] 恩呢,是的,是的,还是初次接触,懂得不多,还请多多关照!
漠北空城 2013-12-08
  • 打赏
  • 举报
回复
引用 3 楼 yjyzsl 的回复:
如果上面的脚本可以运行,那就是定义NUMBER类型的数据时,不需要设置它的长度。
大神,给力啊,我试了一下,真的就是这个问题,
yjyzsl 2013-12-08
  • 打赏
  • 举报
回复
如果上面的脚本可以运行,那就是定义NUMBER类型的数据时,不需要设置它的长度。
CT_LXL 2013-12-08
  • 打赏
  • 举报
回复
引用 楼主 yuechang5 的回复:


--创建一个包(SP_PACKAGE1):包括包头和包体,名字均为包名
--创建一个包头:SP_PACKAGE1
--该包体申明有一个存储过程:UPDATESALBYNO(根据empno修改该雇员的sal)
--该包体申明有一个函数:ANNUA_INCOME(根据ename查询该雇员的年薪)
CREATE OR REPLACE PACKAGE SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER(4),EMPNUBER NUMBER(4));
FUNCTION ANNUA_INCOME(NAME VARCHAR2) RETURN NUMBER(7,2);
END;

--创建包体,即定义好在包头中申明的存储过程以及函数
CREATE OR REPLACE PACKAGE BODY SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER(4),EMPNUBER NUMBER(4)) IS
BEGIN
UPDATE EMP SET SAL = NEWSALARY WHERE EMPNO = EMPNUBER;
END;
FUNCTION ANNUA_INCOME(NAME VARCHAR2)
RETURN NUMBER(7,2) IS ANNUA_SAL NUMBER(7,2);
BEGIN
SELECT SAL*12+NVL(COMM,0) INTO ANNUA_SAL FROM EMP WHERE ENAME = NAME;
RETURN ANNUA_SAL;
END;
END;

--调用包中的存储过程
EXEC SP_PACKAGE1.UPDATESALBYNO(120,886);

怎么会报错呢?!感觉是对的啊,

PACKAGE SP_PACKAGE1 compiled
Errors: check compiler log
PACKAGE BODY SP_PACKAGE1 compiled
Errors: check compiler log
Error starting at line : 83 in command -
EXEC SP_PACKAGE1.UPDATESALBYNO(120,886)
Error report -
ORA-06550: line 1, column 7:
PLS-00905: object SCOTT.SP_PACKAGE1 is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
传入参数不用指定长度吧,还有就是对不属于自己的表进行操作时最好是带上用户名前缀,如:SCOTT.EMP
yjyzsl 2013-12-08
  • 打赏
  • 举报
回复
兄弟你看下这个对不对
--创建一个包(SP_PACKAGE1):包括包头和包体,名字均为包名
--创建一个包头:SP_PACKAGE1
--该包体申明有一个存储过程:UPDATESALBYNO(根据empno修改该雇员的sal)
--该包体申明有一个函数:ANNUA_INCOME(根据ename查询该雇员的年薪)
CREATE OR REPLACE PACKAGE SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER,EMPNUBER NUMBER);
FUNCTION ANNUA_INCOME(NAME VARCHAR2) RETURN NUMBER;
END;

--创建包体,即定义好在包头中申明的存储过程以及函数
CREATE OR REPLACE PACKAGE BODY SP_PACKAGE1 IS
PROCEDURE UPDATESALBYNO(NEWSALARY NUMBER,EMPNUBER NUMBER)
IS
BEGIN
UPDATE EMP SET SAL = NEWSALARY WHERE EMPNO = EMPNUBER;
END;
FUNCTION ANNUA_INCOME(NAME VARCHAR2)
RETURN NUMBER IS ANNUA_SAL NUMBER;
BEGIN
SELECT SAL*12+NVL(COMM,0) INTO ANNUA_SAL FROM EMP WHERE ENAME = NAME;
RETURN ANNUA_SAL;
END;
END;

--调用包中的存储过程
EXEC SP_PACKAGE1.UPDATESALBYNO(1020,886);

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧