2009-11-17 57 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