[英]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.