2009-11-17 4 views
2

У меня есть коллега, который наткнулся на DBMS_SQL.to_refcursor, что было бы отличным решением для его возврата назад, но он работает с Oracle 10g, и эта функция доступна только в 11g.DMBS_SQL.to_refcursor эквивалент в Oracle 10g

Есть ли простой эквивалент этому в 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; 

Update:

, к сожалению, в моем случае это не будет работать, потому что я связывание переменного числа переменных. Именно по этой причине я использовал пакет DBMS_SQL для привязки переменных программно не с использованием синтаксиса.

В этом случае я предлагаю использовать context variables - они поддерживаются с 9i.

+0

@pony, к сожалению, в моем случае это не сработает, потому что я связываю переменное количество переменных. Именно по этой причине я использовал пакет DBMS_SQL для программной привязки переменных не с синтаксисом 'using'. –