簡體   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