Эквивалент DMBS_SQL.to_refcursor в Oracle 10g - PullRequest
2 голосов
/ 17 ноября 2009

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

Есть ли такой простой эквивалент в Oracle 10g?

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

1 Ответ

0 голосов
/ 07 декабря 2009

Эта ссылка содержит список доступных альтернатив динамического 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.

...