CREATE OR REPLACE PROCEDURE P_1(iv_ID integer)
is
 v_sql   VARCHAR (4096);
o_ret integer;
o_err varchar2(4096);
         BEGIN
            v_sql :=
                  'Create Table temp_fox AS Select * from T_AAA a where a.ID='
               || iv_ID
               || ';';            EXECUTE IMMEDIATE v_sql;
commit;
         EXCEPTION
            WHEN OTHERS
            THEN
               o_ret := -80;
               o_err := v_sql;                    --SUBSTR (SQLERRM, 1, 200);
               RETURN;
         END;

解决方案 »

  1.   

    v_sql :='Create Table temp_fox AS Select * from T_AAA a where a.ID='|| iv_ID;
    是这里出了错,那个";"不能加上,SQL语句中是没有";"的,那是pl/sql的语句结束符
      

  2.   

    要在权限里面明式受权建立任何表的权限..create any table
      

  3.   

    支持ORARichard(没钱的日子......)的回复
      

  4.   

    支持ORARichard(没钱的日子......)
    前两天刚刚有人问过
      

  5.   

    如果 表中有lob字段就不能用这种方式
      

  6.   

    按 ORARichard(没钱的日子......) 说的改吧!
      

  7.   

    DECLARE
                v_sql   VARCHAR (4096);
    iv_ID number:=2;
    o_ret number:=2;
    o_err VARCHAR (4096);
             BEGIN
                v_sql :=
                      'Create Table temp_fox AS Select * from T_AAA a where a.ID='
                   || iv_ID;
                EXECUTE IMMEDIATE v_sql;
       commit;
             EXCEPTION
                WHEN OTHERS
                THEN
                   o_ret := -80;
                   o_err := v_sql;                    --SUBSTR (SQLERRM, 1, 200);
                   RETURN;
             END;
      

  8.   

    1  DECLARE
      2              v_sql   VARCHAR (4096);
      3  iv_ID number:=2;
      4  o_ret number:=2;
      5  o_err VARCHAR (4096);
      6           BEGIN
      7              v_sql :=
      8                    'Create Table temp_fox AS Select * from T_AAA a where a.ID='
      9                 || iv_ID;
     10              EXECUTE IMMEDIATE v_sql;
     11     commit;
     12           EXCEPTION
     13              WHEN OTHERS
     14              THEN
     15                 o_ret := -80;
     16                 o_err := v_sql;                    --SUBSTR (SQLERRM, 1, 200);
     17                 RETURN;
     18*          END;
     19  /PL/SQL 过程已成功完成。
      

  9.   

    权限问题,前两天我已经回答过类似问题。在pl/sql语句块、过程中创建数据库对象不仅需要创建对象的系统权限,而且还需要对该系统权限带with admin option权限。该错误显示说明用户拥有CREATE TABALE权限,但是没有with admin option。对用户授予GRANT CREATE TABLE TO username WITH ADMIN OPTION权限即可