日期:2014-05-17  浏览次数:21570 次

PL/SQL 创建包体时说“插入的值对于列过大”
用scott/tiger登录,创建包和包体,代码如下:

Create Or Replace Package test Is
  function f() return number;
End test;

create or replace package body test is
  function f() return number
  is
  begin
  return -1;
  end;
end test;


包头创建成功,但是在创建包体时,出现如下错误:
ORA-00604: 递归SQL层1出现错误
ORA-01401: 插入的值对于列过大
ORA-06512: 在line 2




------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
SQL code
--没有参数的话,去掉括号:
Create Or Replace Package test Is 
    function f return number; 
End test; 

create or replace package body test is 
    function f return number 
    is 
    begin 
        return -1; 
    end; 
end test;

------解决方案--------------------

------解决方案--------------------
也有可能LZ删除了递归SQL层(链)上有用的东西。


探讨
我的版本是9i

函数不加括号的事我已经试过了,还是报一样的错误。把以前写过并且编译通过的创建包的脚本拿来运行也报一样的错误。

但是我用 system/manager 登录时一切都是正常的

并且我记得前几天还是可以的,只不过昨天删除了一些表和相关的过程、函数什么的,会不会是这些删除操作时不小心把不该删除的东西给删掉了?

------解决方案--------------------
如果以前有备份的话,如*.dmp,可以在另一台机中装入Oracle,使用imp导入恢复,仔细比较一下,看能否找出你要的Object。