用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

解决方案 »

  1.   

    oracle什么版本?你的函数不带参数,就把括号去掉。
    改成:
    function f return number; 
    ....
      

  2.   

    --你自定义函数括号里要写参数,或者不用括号.
    -- 没有括号
    SQL> CREATE OR REPLACE PACKAGE TEST IS
      2      FUNCTION F RETURN NUMBER;
      3  END TEST;
      4  /Package createdSQL> CREATE OR REPLACE PACKAGE BODY TEST IS
      2      FUNCTION F RETURN NUMBER
      3      IS
      4      BEGIN
      5          RETURN -1;
      6      END;
      7  END TEST;
      8  /Package body created-- 带参数
    SQL> CREATE OR REPLACE PACKAGE TEST IS
      2      FUNCTION F(SID NUMBER) RETURN NUMBER;
      3  END TEST;
      4  /Package createdSQL> CREATE OR REPLACE PACKAGE BODY TEST IS
      2      FUNCTION F(SID NUMBER) RETURN NUMBER
      3      IS
      4      BEGIN
      5          RETURN -1;
      6      END;
      7  END TEST;
      8  /Package body created
      

  3.   

    --没有参数的话,去掉括号:
    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;
      

  4.   

    参考一下:http://hi.baidu.com/baidotdu/blog/item/e9c84d732a5bc71e8701b0dc.html
    http://liangheatheat.spaces.live.com/blog/cns!927c1e647bbc72c3!367.entry
      

  5.   

    我的版本是9i函数不加括号的事我已经试过了,还是报一样的错误。把以前写过并且编译通过的创建包的脚本拿来运行也报一样的错误。但是我用 system/manager 登录时一切都是正常的并且我记得前几天还是可以的,只不过昨天删除了一些表和相关的过程、函数什么的,会不会是这些删除操作时不小心把不该删除的东西给删掉了?
      

  6.   

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

  7.   

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

  8.   

    CREATE OR REPLACE Package SMAP.test Is 
        function f return number; 
    end;
    /
    create or replace package body test is 
        function f return number 
        is 
        begin 
            return -1; 
        end f;
    end; 
    /这样写就对了