我有一个同事遇到了DBMS_SQL.to_refcursor
这对于他来说是一个很好的解决方案来回传他需要的 refcursor,但是我们正在运行 Oracle 10g,这个特性只在 11g 中可用。
在 Oracle 10g 中是否有一个简单的等价物?
我们开发了另一种编码解决方案的方法,但在 DBMS_SQL 中使用绑定变量会更容易,但我们不希望这个包变得过于难以管理,因为它将传递给其他程序员来维护.
我有一个同事遇到了DBMS_SQL.to_refcursor
这对于他来说是一个很好的解决方案来回传他需要的 refcursor,但是我们正在运行 Oracle 10g,这个特性只在 11g 中可用。
在 Oracle 10g 中是否有一个简单的等价物?
我们开发了另一种编码解决方案的方法,但在 DBMS_SQL 中使用绑定变量会更容易,但我们不希望这个包变得过于难以管理,因为它将传递给其他程序员来维护.
此链接列出了各种可用的动态 SQL 替代方案,包括DBMS_SQL.to_refcursor
. 我主要倾向于使用OPEN ... FOR
符号:
L_CURSOR SYS_REFCURSOR;
L_QUERY VARCHAR2(5000) DEFAULT '...'
BEGIN
FOR I IN 0 .. (TRUNC(LENGTH(L_QUERY) / 255)) LOOP
DBMS_OUTPUT.PUT_LINE(SUBSTR(L_QUERY, I * 255 + 1, 255));
END LOOP;
OPEN L_CURSOR FOR L_QUERY;
RETURN L_CURSOR;
END;
更新:
不幸的是,在我的情况下这不起作用,因为我绑定了不同数量的变量。这就是我使用 DBMS_SQL 包以编程方式绑定变量而不是使用语法的原因。
我建议在这种情况下使用context
变量——从 9i 开始就支持它们。