Oracle PLSql返回值
我又来了一些PLSql 我想知道,是否有任何方法可以像select一样使用下面的函数,而不必将其转换为函数或过程,这样我就可以从包含它的脚本中看到代码 代码如下所示:Oracle PLSql返回值,oracle,string,plsql,Oracle,String,Plsql,我又来了一些PLSql 我想知道,是否有任何方法可以像select一样使用下面的函数,而不必将其转换为函数或过程,这样我就可以从包含它的脚本中看到代码 代码如下所示: DECLARE outpt VARCHAR2(1000) := ''; flow_rI VARCHAR2(50); CURSOR flow_r IS select flow_run_id from table where CREATED_DATE <
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;
想法很简单,我只想从我的表中获取一系列代码,但将结果格式化为12342434424,45767,43之类的东西,而不是查询的表结果。它将在以后的代码中用于各种目的,包括其他查询,在这些查询中,我可以简单地使用该字符串在[variable]中执行
问题是使用dbms_output.Put_lineoutpt;,我无法从我的应用层访问它,似乎在plsql中,如果不将其转换为函数,我就无法使用return
有人有主意吗?它不需要像那样的PlSql,只要我可以在脚本中包含全部代码
谢谢
f、 如果您使用的是Oralce 11 r2,您可以使用Listag来完成这项工作 但本网站提供了您在任何版本中都可以使用的方法,但您需要>=9i才能在纯SQL中使用11r2进行操作: 具体来看Oracle 9i中纯sql的行数和SYS\u CONNECT\u BY\u PATH函数,为什么不只使用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
另一种选择是定义一些输入/输出变量,而不是返回将结果值分配给输出变量。ps:是的,我知道我有一个剩余,在字符串的开头-,我的朋友,因为我太新手了,不知道像sys\u connect\u by\u path这样的美女:非常感谢!工作起来很有魅力。f、 +1,很好的回答,很好地说明了Previor的连接。我确实在我的一张桌子上试过这个,它不会产生和OP相同的答案,但我认为这个概念是正确的,我没有时间调试它。OP。。。我认为这是可以预测的,但我有一个错误ORA-01489输出字符串太长。嗯,我认为最好在代码中处理这个问题,但是,以防万一,您对此有什么建议吗?@flpgdt,sys_connect_by_path的结果不能超过4000 char VARCHAR2限制,因此如果您需要更长的字符串,您需要编写返回CLOBI see的函数。Vincent给了我一个使用多行的sql的解决方案,这对我来说非常有效。谢谢