我想在我的流水线函数中执行动态查询并返回此查询的结果。 可以做到这一点吗? 流水线函数对我来说很方便,因为它可以像表格一样为我的应用程序实现良好的接口。PL/SQL - 立即执行流水线函数
功能:
CREATE OR REPLACE FUNCTION MyFunction(p_schema VARCHAR2) RETURN MyTableType Pipelined IS
v_query VARCHAR2(1000);
BEGIN
v_query := 'SELECT * FROM TABLE ('||p_schema||'.somepackage.SomeFunction)'; --SomeFunction is another pipelined function
EXECUTE IMMEDIATE v_query;
--Results of the v_query are compatible with MyTableType's row type. But how to return them from pipelined function?
END;
@dzb:'DBMS_SQL'不会让查询快速通过魔法:),实际上比原生动态SQL有更多的开销。有很多原因可能会导致您的查询速度变慢,因此我无法通过如此少的上下文来了解如何提高其性能。动态和静态SQL之间的唯一区别是使用变量。您是否使用[参数化动态SQL](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm#BHCGEFCA)? –
感谢这个例子。它工作但可怕的缓慢。我认为这是因为我在我的查询中调用另一个流水线函数(我更新了我的问题),看起来它被调用了太多次。你可以发布一些建议给dbms_sql吗? – dzb
@VincentMalgrat'立即执行...批量收集到...;为我在col.first .. col.last循环管道行()结束循环;'? –