Курсор на основе varchar2

Скрипт
Дата: 22.09.2004 16:37:56
Мне в процедуру передается запрос в виде параметра типа varchar2.
Параметры и макросы запроса тоже передаются.
Как мне на основе это переменной создать курсор?
softwarer
Дата: 22.09.2004 16:39:54
Скрипт
Как мне на основе это переменной создать курсор?

Прежде всего - придумать, что именно Вы хотите сделать; потом - толково и доходчиво объяснить это в форуме. Возможно, пример - исходные данные и то, что должен вернуть Ваш курсор.
Jajahama
Дата: 22.09.2004 16:54:33
Вот пример:

declare
  s varchar2(200);
  type ref_c is ref cursor;
  c ref_c;
  l number;
begin
  s := 'select 1 from dual';
  open c for s;
  fetch c into l;
  dbms_output.put_line(l);
  close c;
end;
Скрипт
Дата: 22.09.2004 16:56:54
Есть символьная переменная типа varchar2
req_str='select * from t1 where first = :a and second = :b'
Как на базе этой переменной создать курсор
Shtock
Дата: 22.09.2004 17:01:23
DECLARE
TYPE EmpCurTyp IS REF CURSOR; -- define weak REF CURSOR type
emp_cv EmpCurTyp; -- declare cursor variable
my_ename VARCHAR2(15);
my_sal NUMBER := 1000;
BEGIN
OPEN emp_cv FOR -- open cursor variable
’SELECT ename, sal FROM emp WHERE sal > :s’ USING my_sal;
...
END;
softwarer
Дата: 22.09.2004 17:02:44
Скрипт
Есть символьная переменная типа varchar2
req_str='select * from t1 where first = :a and second = :b'
Как на базе этой переменной создать курсор

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

Способ обхода проблемы параметров - через SYS_CONTEXT - изложен у Кайта. Но это скорее забавный трюк; вряд ли его стоит рекомендовать.

Если нужно работать с этой выборкой в PL/SQL - используйте пакет DBMS_SQL. Это позволит и установить параметры, и проинтерпретировать ответ.
Скрипт
Дата: 22.09.2004 17:10:44
Вопрос к Shtock: а как же в вашем примере осуществлять извлечение данных курсора в запись(по циклу)?
Shtock
Дата: 22.09.2004 17:39:11
emp_cur - курсорная переменная. С ней работаете как с обычным курсором.
Shtock
Дата: 22.09.2004 17:40:22
SORRY: emp_cv - курсорная переменная
Скрипт
Дата: 22.09.2004 19:09:16
Всем спасибо за исчерпывающую информацию