2017-08-07 62 views
0

我得到這個錯誤ORA-00933:SQL命令沒有正確結束,但是我看不出是什麼問題。用oracle pl/slq創建一個表

創建包:

CREATE OR REPLACE PACKAGE "TOOL_PKG" IS 
    PROCEDURE CREATE_ZTEMP_CLAIMS_TABLES; 
END TOOL_PKG; 
/

創建包的過程。試圖運行該過程時出現錯誤。

我想要做的是用現有的表創建一個新表。我需要它動態的,因爲我將添加更多的表到列表中。

CREATE OR REPLACE PACKAGE BODY CUBS_OWNER."TOOL_PKG" IS 
PROCEDURE CREATE_NEW_TABLE IS 

     type array_t is table of varchar2(50) index by pls_integer; 
     my_table_t array_t; 
     elem varchar2(50); 
     c int; 
    BEGIN 
     my_table_t (1) := 'MY_TABLE'; 

     elem := my_table_t.first; 
     while elem is not null loop 
      select count(*) into c from user_tables where table_name = upper('ZTEST_'||my_table_t(elem)); 
      if c=0 then 
       Begin 
        execute immediate 'CREATE TABLE upper(NEWX_'||my_table_t(elem)||') AS SELECT * FROM upper('||my_table_t(elem)||') where rownum=0'; 
        COMMIT; 
        DBMS_OUTPUT.put_line ('ZTEST_'||my_table_t(elem)||' created.'); 
       EXCEPTION 
       WHEN OTHERS 
        THEN 
        DBMS_OUTPUT.put_line (
         'tool_pkg.create_new_table...failed creating table ' 
         || CHR (10) 
         || SQLERRM); 
       END; 
      end if; 
      elem := my_table_t.next(elem); 
     end loop; 

    EXCEPTION 
     WHEN OTHERS 
     THEN 
      DBMS_OUTPUT.put_line (
       'tool_pkg.create_new_table...failed creating table ' 
      || CHR (10) 
      || SQLERRM); 
    END; 

END tool_pkg; 
/

回答

0

我不得不確保上面的方法在引號之外。

取而代之的是

execute immediate 'CREATE TABLE upper(NEWX_'||my_table_t(elem)||') AS SELECT * FROM upper('||my_table_t(elem)||') where rownum=0'; 

它必須以這種形式

execute immediate 'CREATE TABLE '||upper('NEWX_'||my_table_t(elem))||' AS SELECT * FROM '||upper(my_table_t(elem))||' where rownum=0';