【发布时间】:2020-09-09 09:25:49
【问题描述】:
我喜欢做类似的事情
create tmp_table as ( select 1 some_value, 2 some_other_value from dual union select 3 some_value, 4 some_other_value from dual );
insert into table1 (field1) select some_value from tmp_table;
update table2 set field2 = 5 where field1 in ( select some_value from tmp_table );
drop tmp_table;
有没有更好的方法呢?也许是 WITH 语句的迭代使用?
with tmp_statement as (select ...) ( insert... update ... )
编辑:
您好,很抱歉这个非常笼统的问题。基本上,我想通过拆分操作来改进一些公司语法(选择..循环...在这里慢慢地逐行执行),但保持“仅选择一个”规则有效,因为选择将是广泛的,而您无论如何只想编辑一个选择。我尝试使用 with,因为它似乎更接近现有语法。但也许将选择加载到临时/私有/实际表中的功能只是更好的方法。
谢谢大家!
【问题讨论】:
-
保留临时表以供重用如何? 19c 中有私有临时表,但它们在 PL/SQL 中并不能真正帮助您,因为它需要在编译时定义表。或者,收集可能会有所帮助。
-
尝试更好地解释您想要实现的目标。插入和更新可以组合在一个目标表相同的合并语句中。在你的情况下,这是不可能的,因为你想插入和更新两个不同的表。
标签: sql oracle with-statement