CREATE OR REPLACE PACKAGE TEMPLATE1 IS  TYPE ARR_SEQ IS VARRAY(100) OF VARCHAR2(200);  FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ;END TEMPLATE1;CREATE OR REPLACE PACKAGE BODY TEMPLATE1 IS  FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ AS
    N         NUMBER;
    I         NUMBER;
    V_VAL     VARCHAR2(200);
    V_ARR_SEQ ARR_SEQ;
  BEGIN
    N         := NVL(IN_N, 0);
    I         := 1;
    V_ARR_SEQ := ARR_SEQ();
    LOOP
      EXIT WHEN N <= 0;
      SELECT SEQ_AUTO_ID.nextval INTO V_VAL FROM DUAL;
      V_ARR_SEQ.EXTEND;
      V_ARR_SEQ(I) := V_VAL;
      N := N - 1;
      I := I + 1;
    END LOOP;
    RETURN(V_ARR_SEQ);
  END FUN_CREATE_PROJECT_ID;
在plsql的窗口里面运行,结果有错误,重新编译发现错误如下:Compilation errors for PACKAGE FAQ.TEMPLATE1Error: PLS-00103: Encountered the symbol "CREATE"
Line: 9
Text: CREATE OR REPLACE PACKAGE BODY TEMPLATE1 IS
大家帮看下,这个错误如何修改?

解决方案 »

  1.   

    掉了/
    你这个分开执行应该是可以的
    CREATE OR REPLACE PACKAGE TEMPLATE1 IS  TYPE ARR_SEQ IS VARRAY(100) OF VARCHAR2(200);  FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ;END TEMPLATE1;
    /CREATE OR REPLACE PACKAGE BODY TEMPLATE1 IS  FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ AS
        N         NUMBER;
        I         NUMBER;
        V_VAL     VARCHAR2(200);
        V_ARR_SEQ ARR_SEQ;
      BEGIN
        N         := NVL(IN_N, 0);
        I         := 1;
        V_ARR_SEQ := ARR_SEQ();
        LOOP
          EXIT WHEN N <= 0;
          SELECT SEQ_AUTO_ID.nextval INTO V_VAL FROM DUAL;
          V_ARR_SEQ.EXTEND;
          V_ARR_SEQ(I) := V_VAL;
          N := N - 1;
          I := I + 1;
        END LOOP;
        RETURN(V_ARR_SEQ);
      END FUN_CREATE_PROJECT_ID;
      

  2.   

    还有代码没贴完整,body里面的function结束时不用加名字,body结束语句end没有写
      

  3.   

    包头、包体分开编译
    包体缺少end结尾
      

  4.   


    按照你的方式来编译,我在plsql的sql窗口或者command窗口编译,都是报如下错误啊:Compilation errors for PACKAGE FAQ.TEMPLATE1Error: PLS-00103: Encountered the symbol "CREATE"
    Line: 9
    Text: CREATE OR REPLACE PACKAGE BODY TEMPLATE1 IS 
      

  5.   

    分开编译,出现错误不该是line 9
      

  6.   

    CREATE OR REPLACE PACKAGE BODY TEMPLATE1 aS
    FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ iS
    N NUMBER;
    I NUMBER;
    .....
    BEGIN
    ........
    end FUN_CREATE_PROJECT_ID;end TEMPLATE1;   ------ 把这个加上。
    /
      

  7.   

    你好,我写成下面的这样,还是报错啊:CREATE OR REPLACE PACKAGE TEMPLATE1 IS  TYPE ARR_SEQ IS VARRAY(100) OF VARCHAR2(200);  FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ;END TEMPLATE1;
    CREATE OR REPLACE PACKAGE BODY TEMPLATE1 IS  FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ AS
        N         NUMBER;
        I         NUMBER;
        V_VAL     VARCHAR2(200);
        V_ARR_SEQ ARR_SEQ;
      BEGIN
        N         := NVL(IN_N, 0);
        I         := 1;
        V_ARR_SEQ := ARR_SEQ();
        LOOP
          EXIT WHEN N <= 0;
          SELECT SEQ_AUTO_ID.nextval INTO V_VAL FROM DUAL;
          V_ARR_SEQ.EXTEND;
          V_ARR_SEQ(I) := V_VAL;
          N := N - 1;
          I := I + 1;
        END LOOP;
        RETURN(V_ARR_SEQ);
      END FUN_CREATE_PROJECT_ID;
    end TEMPLATE1;
    报一样的错误,这是为什么呢?
      

  8.   

    SQL> CREATE OR REPLACE PACKAGE TEMPLATE1 IS
      2  
      3    TYPE ARR_SEQ IS VARRAY(100) OF VARCHAR2(200);
      4  
      5    FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ;
      6  
      7  END TEMPLATE1;
      8  /
    Warning: connection was lost and re-establishedPackage createdSQL> create sequence SEQ_AUTO_ID start with 1 increment by 1;Sequence createdSQL> CREATE OR REPLACE PACKAGE BODY TEMPLATE1 IS
      2  
      3    FUNCTION FUN_CREATE_PROJECT_ID(IN_N IN NUMBER) RETURN ARR_SEQ AS
      4      N         NUMBER;
      5      I         NUMBER;
      6      V_VAL     VARCHAR2(200);
      7      V_ARR_SEQ ARR_SEQ;
      8    BEGIN
      9      N         := NVL(IN_N, 0);
     10      I         := 1;
     11      V_ARR_SEQ := ARR_SEQ();
     12      LOOP
     13        EXIT WHEN N <= 0;
     14        SELECT SEQ_AUTO_ID.nextval INTO V_VAL FROM DUAL;
     15        V_ARR_SEQ.EXTEND;
     16        V_ARR_SEQ(I) := V_VAL;
     17        N := N - 1;
     18        I := I + 1;
     19      END LOOP;
     20      RETURN(V_ARR_SEQ);
     21    END;
     22  end TEMPLATE1;
     23  /Package body created
      

  9.   


    是不是一些空格的问题哟。show errrors;看看现在还在报什么样的错。
      

  10.   


    你先 drop PACKAGE  TEMPLATE1 ;
    然后在分开编译