为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:windows 10
【CPU】: i7-11700
【问题描述】*:
1、EXECUTE IMMEDIATE语句中创建临时表并用USING传参数时报错:-3722: 无效的表达式,如下图:
2、当去掉【CREATE GLOBAL TEMPORARY TABLE GTMP___ZLJHCLLBMX2 ON COMMIT PRESERVE ROWS AS】时,语句可以正确执行,如下图:
3、带有【CREATE GLOBAL TEMPORARY TABLE GTMP___ZLJHCLLBMX2 ON COMMIT PRESERVE ROWS AS】,不带using参数时,语句也可以正确定执行,如下图:
只有【CREATE GLOBAL TEMPORARY TABLE GTMP___ZLJHCLLBMX2 ON COMMIT PRESERVE ROWS AS】与using参数同时出现时才会报错,把SQL里面的参数改为?占位符的方式也存在同样问题。
请教一下如何解决?
动态 SQL 的执行首先分析 SQL 动态语句文本,检查是否有错误,如果有错误则不执行,显然下面的语句无法传参导致解析失败
CREATE GLOBAL TEMPORARY TABLE GTMP___ZLJHCLLBMX2 ON COMMIT PRESERVE ROWS AS SELECT * FROM TEST WHERE ID=?
上述语句暂时还不支持传参,可以这样先绕过下:
DECLARE
SQL1 VARCHAR(1000);
PARA2 NUMBER;
BEGIN
PARA2 =1;
SQL1='CREATE GLOBAL TEMPORARY TABLE GTMP___ZLJHCLLBMX2 ON COMMIT PRESERVE ROWS AS SELECT * FROM TEST WHERE ID='||PARA2;
--EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE GTMP___ZLJHCLLBMX2 ON COMMIT PRESERVE ROWS AS SELECT * FROM TEST WHERE ID=:PARA1' USING PARA2;
EXECUTE IMMEDIATE SQL1;
END