繁体   English   中英

大量的游标,一个流水线功能

[英]A large number of cursors , one pipelined function

我有这样的代码:

CREATE OR REPLACE TYPE person_typ AS OBJECT (ssn NUMBER(9), 
name VARCHAR2(30), address VARCHAR2(100));

CREATE OR REPLACE TYPE t_tab AS TABLE OF person_typ;

CREATE OR REPLACE FUNCTION my_pipe(p_in VARCHAR2) RETURN t_tab PIPELINED IS
     rec person_typ;

     CURSOR cur1 IS
          SELECT ssn, name, address FROM /* ... complex query */

     CURSOR cur2 IS
          SELECT ssn, name, address FROM /* ... complex query */

     CURSOR cur3 IS
          SELECT ssn, name, address FROM /* ... complex query */

     CURSOR cur4 IS
          SELECT ssn, name, address FROM /* ... complex query */

     CURSOR cur5 IS
          SELECT ssn, name, address FROM /* ... complex query */
BEGIN
    FOR cur IN cur1 LOOP
        rec := r_inc(cur.ssn, cur.name, cur.address);
        PIPE ROW(rec);
    END LOOP; 

    FOR cur IN cur2 LOOP
        rec := r_inc(cur.ssn, cur.name, cur.address);
        PIPE ROW(rec);
    END LOOP; 

    FOR cur IN cur3 LOOP
        rec := r_inc(cur.ssn, cur.name, cur.address);
        PIPE ROW(rec);
    END LOOP; 

    FOR cur IN cur4 LOOP
        rec := r_inc(cur.ssn, cur.name, cur.address);
        PIPE ROW(rec);
    END LOOP; 

    FOR cur IN cur5 LOOP
        rec := r_inc(cur.ssn, cur.name, cur.address);
        PIPE ROW(rec);
    END LOOP; 
END;

我的问题是我的流水线函数太丑了-我必须有五个游标(这与我无关),但是我不想有五个for循环。 我宁愿只有一个循环和一个PIPE ROW(rec)语句...有什么方法可以将结果连接到一个集合中,然后对其进行迭代?

嗯,如何使用union all并只有一个光标的联合?

 CURSOR cur1 IS
      SELECT ssn, name, address FROM /* ... complex query */
      UNION ALL
      SELECT ssn, name, address FROM /* ... complex query */
      UNION ALL
      SELECT ssn, name, address FROM /* ... complex query */
      UNION ALL
      SELECT ssn, name, address FROM /* ... complex query */
      UNION ALL
      SELECT ssn, name, address FROM /* ... complex query */

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM