gpt4 book ai didi

oracle - 从游标值执行 SQL

转载 作者:行者123 更新时间:2023-12-01 11:15:37 24 4
gpt4 key购买 nike

(只是为了先发制人——我知道这种方法有多么棘手和有缺陷。它只是个人使用的东西,可以使某项任务更容易。)

对于这个例子,我想创建两个动态 SQL 插入语句,将 ALL_TABLES 的前两个结果插入 GT_DUMMY,并用输入值填充。

CREATE GLOBAL TEMPORARY TABLE GT_DUMMY
( Test_Field VARCHAR(100)
);

CREATE OR REPLACE PROCEDURE LOAD_GT_DUMMY
( Insert_String VARCHAR
)
IS
BEGIN

FOR col IN
( SELECT 'INSERT INTO GT_DUMMY VALUES(' || CHR(39) || Insert_String || Table_Name || CHR(39) || ');' AS insertStatement
FROM ALL_TABLES
WHERE ROWNUM <= 2
) LOOP

DBMS_OUTPUT.put_line(col.insertStatement);
-- Result of EXEC LOAD_GT_DUMMY('SOMETHING'); :
-- INSERT INTO GT_DUMMY VALUES('SOMETHINGDUAL');
-- INSERT INTO GT_DUMMY VALUES('SOMETHINGSYSTEM_PRIVILEGE_MAP');

-- This command fails when
EXECUTE IMMEDIATE col.insertStatement;

END LOOP;

END;

插入格式正确,如果我单独运行它们就会执行,但是 EXECUTE IMMEDIATE col.insertStatement;命令不起作用。该过程编译,但当我尝试运行时

EXEC LOAD_GT_DUMMY('SOMETHING');

我得到一个错误

ORA-00933: SQL command not properly ended
ORA-06512: at "MY_SCHEMA.LOAD_GT_DUMMY", line 14
ORA-06512: at line 1

有什么想法吗?我的语法关闭了吗?

最好的。

最佳答案

删除终止分号;动态 SQL 不喜欢它。

SELECT 'INSERT INTO GT_DUMMY VALU... <snip> ... || CHR(39) || ');' 
^
|
here

关于oracle - 从游标值执行 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51826435/

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