在这里,我再次介绍一些PLSql。
我想知道,是否有任何方法可以像选择一样使用以下函数,而不必将其转换为函数或过程(因此我可以从包含它的脚本中查看代码)。
代码如下:
DECLARE
outpt VARCHAR2(1000) := '';
flow_rI VARCHAR2(50);
CURSOR flow_r IS
select flow_run_id
from table
where CREATED_DATE < sysdate - 32
and rownum < 10
order by 1 desc;
BEGIN
OPEN flow_r;
LOOP
FETCH flow_r INTO flow_rI;
EXIT WHEN flow_r%notfound;
BEGIN
outpt := outpt || ',' || flow_rI;
EXCEPTION
WHEN no_data_found THEN
dbms_output.Put_line(outpt);
END;
END LOOP;
dbms_output.Put_line(outpt);
outpt := '';
CLOSE flow_r;
END;
这个想法很简单,我只想从我的
table
中获得一系列代码,但是将结果格式化为类似"1234,2434,424,45,767,43"
的东西,而不是查询的表结果。稍后将在代码中将其用于各种目的,包括可以简单地执行in ([variable with that string])
的另一个查询。问题是使用
dbms_output.Put_line(outpt);
时,我无法从应用程序层访问它,而且看来在plsql中,如果不将return
转换为函数,就无法使用它。有人有主意吗?只要我可以在脚本中包含整个代码,就不必像这样的PlSql。
谢谢!
F。
最佳答案
为什么不只使用sql:
SELECT MAX(ltrim(sys_connect_by_path(flow_run_id, ','), ','))
FROM
(
select flow_run_id, rownum rn
from table
where CREATED_DATE < sysdate - 32
and rownum < 10
order by 1 desc
)
START WITH rn = 1
CONNECT BY PRIOR rn = rn - 1