【发布时间】:2020-12-21 21:26:22
【问题描述】:
我有一个从查询返回结果集的过程,该查询是在 oracle 中动态生成的。它确实返回结果集,但我想要的是从生成的结果集中处理信息并将其保存在表中。
这是我的查询..
PROCEDURE GetItem(pitem_list in varchar2,
PGetData OUT SYS_REFCURSOR)
is
strsql2 long;
BEGIN
strsql2 :='SELECT val, val1, val2 from table1'; ----- This is a sample query as the main query is complex so just for simplicity I wrote this here.
open PGetData for strsql2; ----- This do returns me the result set generated from the query;
现在我想要执行存储在“strsql2”变量中的查询并读取结果并处理一些信息..
我想从 FOR LOOP 执行它。
strsql2 :='SELECT val, val1, val2 from table1';
for log in (select strsql2 from dual) ---- I even tried execute immediate
loop
if(log.val = 'TEST')
then
insert into table ----
else
update table --
end if;
end loop;
open PGetData for strsql2; --- After saving the result in table then return the result set..
我在哪里出错了,还是有其他方法可以做到这一点? 我被困在这里了。
【问题讨论】:
-
如果你动态生成查询,你知道结果集在编译时会是什么样子吗?从您的示例中,您似乎假设动态查询将有一个名为
val的列,它是一个varchar2,其值可能为“TEST”。您知道在编译时将作为结果集的一部分返回的其他列吗? -
是的,我的结果集列已定义,我什至修改了查询以供理解。