gpt4 book ai didi

oracle - FOR r in (SELECT ... INTO ...)

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

今天,我遇到了一段我认为不应该编译的有趣代码。它使用 SELECT ... INTO FOR r IN ... LOOP 中的条款.这是在 Oracle 11i 上编译的脚本。该脚本是在一个包中编译的实际 PL/SQL 代码的缩短版本,在生产中运行。

create table tq84_foo (
i number,
t varchar2(10)
);

insert into tq84_foo values (1, 'abc');
insert into tq84_foo values (2, 'def');

declare

rec tq84_foo%rowtype;

begin

for r in (
select i, t
into rec.i, rec.t -- Hmm???
from tq84_foo
)
loop

dbms_output.put_line('rec: i= ' || rec.i || ', t=' || rec.t);

end loop;

end;
/


drop table tq84_foo purge;

运行时的输出是:
rec: i= , t=
rec: i= , t=

我相信 1) 我可以安全地删除 INTO select的一部分声明和 2) 该构造应该是无效的或至少表现出未定义的行为。

我的两个假设对吗?

最佳答案

您的假设部分正确:

1) 是的,您可以安全地删除 INTO SELECT的一部分陈述。但是您应该将循环中的行更改为这种格式:

dbms_output.put_line('rec: i= ' || r.i || ', t=' || r.t);

这样它就会从 r 中取出数据。多变的

2) 这段代码的问题在于 SELECT ... INTO 的语法如果查询返回多于一行,则应该失败。如果它没有失败,那么它可能是一个错误并且会有意外的行为。

关于oracle - FOR r in (SELECT ... INTO ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27899660/

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