gpt4 book ai didi

sql - 如何在 EXECUTE IMMEDIATE 查询中添加表名?

转载 作者:行者123 更新时间:2023-12-04 22:24:06 27 4
gpt4 key购买 nike

我有一个关于“立即执行”的问题。
我在下一个 plsql 语句中动态更改了表名

DECLARE

TYPE CurTyp IS REF CURSOR;
cur CurTyp;
str1 VARCHAR2(30);
str2 VARCHAR2(30);
table_name VARCHAR2(30);

BEGIN

select data
into table_name
from ref
where o_id = 111
and a_id = 222;



OPEN cur FOR
'select name, sname from :1 b,myobjects a where a.obj_id = b.obj_id'
USING table_name;
LOOP
FETCH cur INTO str1, str2;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(str1||str2);
END LOOP;
CLOSE cur;
END

是否可以将下一个执行立即查询的结果读取到游标?
'select  name, sname  from :1 b,myobjects a where a.obj_id = b.obj_id'
USING table_name;

或者也许有什么办法可以做到这一点?

提前致谢。

最佳答案

对于对象名称,您必须使用连接,而不是绑定(bind)变量。

来自 Dynamic SQL chapter of the PL/SQL Language Reference :

The database uses the values of bind variables exclusively and does not interpret their contents in any way.



绑定(bind)变量有助于提高安全性和性能。但它们不适用于表格等对象。如果您传入一个表名,那么 Oracle 必须解释其内容,这将抵消安全性和性能优势。

关于sql - 如何在 EXECUTE IMMEDIATE 查询中添加表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8441064/

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