【发布时间】:2016-03-10 11:49:53
【问题描述】:
我被要求创建一个 SP 来创建临时表并插入一些记录。
我正在为下面提到的相同准备一些示例代码,但没有显示输出。
create or replace procedure Test
is
stmt varchar2(1000);
stmt2 varchar2(1000);
begin
stmt := 'create global temporary table temp_1(id number(10))';
execute immediate stmt;
insert into temp_1(id) values (10);
execute immediate 'Select * from temp_1';
execute immediate 'Drop table temp_1';
commit;
end;
当我通过 (Exec Test) 执行 SP 时,不显示所需的 O/P。
我希望显示“Select * from temp_1”的 O/P。但它没有发生。请提出我做错的地方。
【问题讨论】:
-
在 PL/SQL 中创建一个临时表、插入一些记录并随后删除该表是相当不常见的事情。通常有办法完全避免临时表。您手术的最终目标是什么?
-
PL/SQL 不会神奇地显示 SELECT 语句的结果。您需要处理结果并显示它,例如使用
dbms_output。或者将其设为表函数并直接返回选择的结果。但我同意 ammoQ:临时表的使用似乎相当可疑。 -
@ammoQ,实际上我必须使用临时表执行此任务以支持一些旧代码。但我很想知道为什么(执行立即'Select * from temp_1';)不产生任何结果。
-
感谢@a_horse_with_no_name,@ammoQ 的建议。您能否帮我了解 GTT 的替代概念。我的要求是:我在一个视图中有 1000 万条记录。我必须提取视图结果,执行一些业务逻辑,例如执行映射,然后插入到最终表中。插入仍然需要额外的数据逻辑。请提出建议。
-
您的最新评论是您在此处发布的问题:stackoverflow.com/questions/35898642/… - 所以最好在此处添加任何其他建议作为答案。
标签: oracle11g