PLSql返回值

fil*_*ppo 3 string oracle plsql

在这里,我再次使用一些PLSql ..

我想知道,如果有任何方法我可以使用以下函数,如select而不必将其转换为函数或过程(因此我可以从包含它的脚本中看到代码).

代码如下:

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;
Run Code Online (Sandbox Code Playgroud)

这个想法很简单,我只想从我那里得到一系列代码,table但是结果的格式就像是"1234,2434,424,45,767,43"一种东西,而不是查询的表格结果.它将在稍后的代码中用于各种目的,包括我可以简单地执行的另一个查询in ([variable with that string]).

事情是,使用dbms_output.Put_line(outpt);,我无法从我的应用程序层访问它,似乎在plsql我不能使用return没有把它变成一个函数.

有人有想法吗?只要我可以在脚本中拥有整个代码,它就不需要像那样的PlSql.

谢谢!

F.

Mic*_*sov 9

为什么不使用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
Run Code Online (Sandbox Code Playgroud)