如何使用 oracle 19.0 中的流水线表函数来实现这一点,使用带有批量收集的限制子句来减少内存使用量并提高性能?
一个简单的流水线函数是:
CREATE OR REPLACE FUNCTION f(v_input nvarchar2)
RETURN t_table PIPELINED
IS
BEGIN
FOR n IN ( SELECT id FROM table1 WHERE "USER" = v_input )
LOOP
PIPE ROW (n.id);
END LOOP;
END;
/
或者,如果您想使用游标并id
批量处理 s:
CREATE OR REPLACE FUNCTION f(v_input nvarchar2)
RETURN t_table PIPELINED
IS
CURSOR v_cur IS
SELECT id
FROM table1
WHERE "USER" = v_input;
v_table t_table;
BEGIN
OPEN v_cur;
LOOP
FETCH v_cur BULK COLLECT INTO v_table LIMIT 100;
FOR i IN 1 .. v_table.COUNT LOOP
PIPE ROW (v_table(i));
END LOOP;
EXIT WHEN v_cur%NOTFOUND;
END LOOP;
CLOSE v_cur;
END;
/
然后你可以使用:
SELECT *
FROM table2
WHERE id MEMBER OF f('abc');
db<>在这里摆弄