gpt4 book ai didi

sql - 与 Oracle 动态 SQL 斗争

转载 作者:行者123 更新时间:2023-12-01 23:23:25 25 4
gpt4 key购买 nike

我正在处理一个需要高度自动化的 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 企业版 Release 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;

错误信息:

错误从行开始:命令中的 1 -执行 Process_Wic_Snap_Partition错误报告 -ORA-00911: 无效字符ORA-06512: 在“MY_SCHEMA.MY_PROCEDURE”,第 102 行ORA-06512: 在第 1 行00911. 00000 - “无效字符”*原因:标识符不能以除以下以外的任何 ASCII 字符开头 字母和数字。 $#_ 也可以在第一个之后 特点。双引号括起的标识符可能包含 双引号以外的任何字符。替代报价 (q'#...#') 不能使用空格、制表符或回车作为 分隔符。对于所有其他上下文,请参阅 SQL 语言 引用手册。

最佳答案

您的查询没有问题,但是对于 DynamicSQL,您不允许在语句末尾使用分号。更改行 Sqexec:= Sqexec || 'PARTITION('||Basket_Partition_To_Process||'); '; 不包括语句末尾的分号:Sqexec:= Sqlexec || 'PARTITION ('||Basket_Partition_To_Process||')';

关于sql - 与 Oracle 动态 SQL 斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25668070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com