我正在研究需要非常自動化的Oracle過程,因此我使用的是動態SQL。我是使用動態SQL的新手。與Oracle動態SQL拼搏
我正在使用varchar2變量來構建需要執行的SQL。我使用dbms_output來捕獲正在生成的SQL,並且它執行得很好:
sql創建Basket Swap table = CREATE TABLE INBOUND.BASKET_CTAS_SWP COMPRESS FOR QUERY HIGH AS SELECT * FROM INBOUND.BASKET_FCT PARTITION(SYS_1234) ;
然而,當我執行使用此程序,它會生成以下
Execute MyProcedure;
錯誤謝謝你的任何指導!
Oracle版本:Oracle數據庫11g企業版發佈11.2.0.3.0 - 64位生產
IDE:Oracle SQL Developer中版本4.0.2.15構建15.21
代碼:
note: all variables set at beginning of procedure...
Sqlexec:= 'CREATE TABLE ' || Basket_Swap_Schema || '.' || Basket_Swap_Table_Name || ' ';
Sqlexec:= Sqlexec || 'COMPRESS FOR QUERY HIGH ';
Sqlexec:= Sqlexec || 'AS SELECT * FROM ' || Basket_Source_Schema_Name || '.' || Basket_Source_Table_Name || ' ';
Sqlexec:= Sqlexec || 'PARTITION ('||Basket_Partition_To_Process||'); ';
Dbms_Output.Put_Line('sql to create Basket Swap table = ' || Sqlexec);
Execute Immediate Sqlexec;
錯誤消息:
錯誤從行開始:1在命令中 - 執行Process_Wic_Snap_Partition 錯誤報告 - ORA-00911:無效字符 ORA-06512:在 「MY_SCHEMA.MY_PROCEDURE」,線路102 ORA-06512:在line 1 00911. 00000 - 「無效字符」 *原因:標識符字母和數字以外的任何ASCII字符都不能以 以外的字符開頭。 $#_也是在第一個 之後的字符。由雙引號括起來的標識符可能包含 除雙引號以外的任何字符。替代引號 (q'#...#')不能使用空格,製表符或回車作爲 分隔符。有關所有其他上下文,請參閱SQL語言參考手冊 。
令人驚歎,就是這樣。非常感謝 – Steve 2014-09-04 14:55:57