2009-11-17 59 views
2

我有一位同事遇到了DBMS_SQL.to_refcursor这对他来说是一个很好的解决方案,可以让他回传他需要的refcursor,但是我们运行的是Oracle 10g,并且此功能仅在11g中提供。Oracle 10g中的DMBS_SQL.to_refcursor等效

Oracle 10g中是否有与此类似的简单功能?

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

回答

0

link lists the various dynamic SQL alternatives available,包括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 variables - 自9i以来它们一直受到支持。

+0

@pony不幸的是,在我的情况下,这是行不通的,因为我绑定了不同数量的变量。这就是我使用DBMS_SQL包以编程方式绑定变量而不是使用'using'语法的原因。 – 2009-12-07 03:34:52