gpt4 book ai didi

sql - 如何在 pl sql 脚本中打印 select 语句?

转载 作者:行者123 更新时间:2023-12-05 03:58:33 24 4
gpt4 key购买 nike

我有两个数组,我在其中存储了一些有效的表值,并在 SELECT 语句中传递它们。我这样做是为了让数组 ab 值相应地进入 where 条件。

我正在使用 EXECUTE IMMEDIATE 打印 SELECT 语句,我尝试将 SELECT 语句的值插入变量并打印它通过 dbms_output.put_line 但它给出了一个错误。

我的代码不打印任何东西,它只显示程序已完成。

DECLARE
dest temp_1.destination%type;
type arr1 IS VARRAY(4) OF VARCHAR2(50);
sd arr1;
type arr2 IS VARRAY(4) OF VARCHAR2(50);
sid1 arr2;
total integer;
BEGIN
sd := street_directional('a','b','c','d');
sid1 := street_direction('1','2','3','4');
total := sd.count;
FOR i in 1 .. total LOOP
execute immediate q'[select destination from temp_1 where cond1 =(:var1) and cond2 = (:var2) ]' using sd(i),sid1(i);

END LOOP;
END;

这不会给出任何输出,它只是显示过程已完成。

我试过这样做:

execute immediate q'[select destination from temp_1 where cond1 =(:var1) and cond2 = (:var2) into dest]' using sd(i),sid1(i); 
return dest;
-- or printline
dbms_output.put_line(dest);

但是报错了。我一直保持 serveroutput on 并在 oracle 引擎上运行它。

如果除了使用 PL/SQL 之外还有一些简单的方法来获取结果,请告诉我。

最佳答案

即使使用动态 SQL,您也需要选择 某些东西,它必须在语句的动态部分之外。事实上,对于动态 SQL,如果不这样做,查询将被解析但不会执行。 (其他 DML 和 DDL 的行为当然不同。)您的第二个 block 有 into dest 但在查询字符串中,它什么也没做;并且您不能从匿名 block 返回值。

execute immediate q'[select destination from temp_1 where cond1 =(:var1) and cond2 = (:var2)]'
into dest
using sd(i),sid1(i);

dbms_output.put_line(dest);

db<>fiddle

您仍然需要在客户端或等效程序中设置 set serveroutput on 才能看到 dest 输出。如果 temp_1 中没有任何一对条件值的匹配行,那么您将得到一个未找到数据的异常,因此您需要决定这是否可能以及您要做什么如果发生这种情况,我想做。

看起来这并不真的需要动态 - 我在 fiddle 中使用了一个静态版本:

select destination into dest from temp_1 where cond1 = sd(i) and cond2 = sid1(i);

dbms_output.put_line(dest);

... 甚至是真正的 PL/SQL,但大概是一种练习。

关于sql - 如何在 pl sql 脚本中打印 select 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869570/

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