2

我有一个同事遇到了DBMS_SQL.to_refcursor这对于他来说是一个很好的解决方案来回传他需要的 refcursor,但是我们正在运行 Oracle 10g,这个特性只在 11g 中可用。

在 Oracle 10g 中是否有一个简单的等价物?

我们开发了另一种编码解决方案的方法,但在 DBMS_SQL 中使用绑定变量会更容易,但我们不希望这个包变得过于难以管理,因为它将传递给其他程序员来维护.

4

1 回答 1

0

链接列出了各种可用的动态 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 开始就支持它们。

于 2009-12-07T01:40:03.220 回答