Ste*_*eve 3 sql oracle plsql dynamic-sql oracle-sqldeveloper
我正在研究一个需要非常自动化的Oracle过程,所以我使用的是动态SQL.我是新手使用动态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;
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何指导!
oracle版本:Oracle Database 11g企业版版本11.2.0.3.0 - 64位生产
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;
Run Code Online (Sandbox Code Playgroud)
错误信息:
从第1行开始出错:命令执行 - 执行Process_Wic_Snap_Partition错误报告 - ORA-00911:无效字符ORA-06512:位于"MY_SCHEMA.MY_PROCEDURE",第102行ORA-06512:第1行00911. 00000 - "无效字符"*原因:标识符不能以字母和数字以外的任何ASCII字符开头.第一个字符后也允许$#_.双引号括起来的标识符可以包含除doublequote之外的任何字符.替代引号(q'#...#')不能使用空格,制表符或回车符作为分隔符.对于所有其他上下文,请参阅SQL语言参考手册.
您的查询很好,但使用DynamicSQL时,您不允许在语句结尾处使用分号.将该行更改Sqlexec:= Sqlexec || 'PARTITION ('||Basket_Partition_To_Process||'); ';
为不在语句末尾包含分号:Sqlexec:= Sqlexec || 'PARTITION ('||Basket_Partition_To_Process||')';