gpt4 book ai didi

sql - 通过立即执行创建表不起作用

转载 作者:行者123 更新时间:2023-12-05 01:46:08 24 4
gpt4 key购买 nike

我遇到了以下 PLSQL block 的问题。当代码如下所示执行时(没有循环)脚本成功。但是,当循环取消注释时,我收到一条错误消息,指出未找到 select 语句中的表。检查时,发现确实根本没有创建表。这几乎就像循环试图在立即执行之前运行一样。

是的,我知道由于无论如何都没有填充表,所以无论如何打印语句都不会出现,但是我不希望查询失败。

begin
execute immediate 'create table tbl_temp (oid_value number(20) ,rowid_field varchar2(20))';

/*for nullval in (select oid_value from tbl_temp)
loop
DBMS_OUTPUT.PUT_LINE('something');
end loop;*/
end;

最佳答案

当您尝试运行这段代码时,Oracle 首先检查它是否正确,从而检查它使用的所有表是否都存在。

一开始你的表是不存在的,所以这段代码会报错,什么都不做。

如果您想即时创建一个表然后对其进行查询(我认为这不是一个好主意),您可以使用基于动态 SQL 的游标;例如:

SQL> select * from tbl_temp;
select * from tbl_temp
*
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> declare
2 cur sys_refcursor;
3 val number(20);
4 begin
5 execute immediate 'create table tbl_temp (oid_value number(20) ,rowid_field varchar2(20))';
6
7 open cur for 'select oid_value from tbl_temp';
8 loop
9 fetch cur into val;
10 exit when cur%notfound;
11 dbms_output.put_line('val = ' || val);
12 end loop;
13 end;
14
15
16 /

PL/SQL procedure successfully completed.

SQL> select * from tbl_temp;

no rows selected

SQL>

关于sql - 通过立即执行创建表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553688/

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