【发布时间】:2014-10-29 08:32:45
【问题描述】:
我正在开发一个需要非常自动化的 Oracle 过程,因此我使用的是动态 SQL。我是使用动态 SQL 的新手。
我正在使用 varchar2 变量来构建需要执行的 SQL。我使用了一个 dbms_output 来捕获正在生成的 SQL,它执行得很好:
创建篮子交换表的 sql = CREATE TABLE INBOUND.BASKET_CTAS_SWP COMPRESS FOR QUERY HIGH AS SELECT * FROM INBOUND.BASKET_FCT PARTITION (SYS_1234);
但是,当我使用它执行该过程时,它会产生以下错误
Execute MyProcedure;
感谢您的指导!
oracle 版本:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
IDE:Oracle SQL Developer 版本 4.0.2.15 Build 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: 在第 1 行 00911. 00000 - “无效字符” *原因:标识符不能以任何 ASCII 字符开头,除了 字母和数字。 $#_ 也可以在第一个之后 特点。用双引号括起来的标识符可能包含 双引号以外的任何字符。替代报价 (q'#...#') 不能使用空格、制表符或回车作为 分隔符。对于所有其他上下文,请参阅 SQL 语言 参考手册。
【问题讨论】:
标签: sql oracle plsql oracle-sqldeveloper dynamic-sql