Oracle PLSQL - Объявите курсор на несуществующей таблице

Я хочу объявить курсор на таблице, которая не существует. Конечно, моя процедура не компилирует.

Эта таблица является временной таблицей и составлена пред процесс. Это будет существовать на времени выполнения, но во время компиляции его другой истории.

Для моего выбора / обновляет другой DML операции, я использовал

EXECUTE IMMEDIATE 'operation from tmp_table'

но я не могу найти обходное решение для курсоров.

Существует ли путь?

В основном я хочу, чтобы это скомпилировало

drop table test;

/*from this on should compile*/
DECLARE
cursor c is select * from test;

BEGIN
  for reg in c LOOP
  /*...*/
  END LOOP;
END;

обновление

До сих пор не компиляция:

SQL> declare
  2  c sys_refcursor;
  3  BEGIN
  4  open c for 'select * from pepito'; -- 'pepito' does not exist
  5  close c;
  6  end;
  7  /
declare
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at line 4

Должен использовать CREATE PROCEDURE, спасибо.

Заранее спасибо.

7
задан OMG Ponies 1 April 2011 в 01:20
поделиться

3 ответа

Вы должны иметь возможность определять свой курсор следующим образом:

DECLARE
  c SYS_REFCURSOR;
BEGIN
  OPEN c FOR 'SELECT * FROM dual';
  CLOSE c;
END;

Вы также можете связывать аргументы:

OPEN c FOR 'SELECT * FROM dual WHERE DUMMY = :1' USING 'X';

Для получения дополнительной информации см. Документацию Oracle по оператору OPEN-FOR .

Пример использования хранимой процедуры

CREATE OR REPLACE PROCEDURE test IS
  c SYS_REFCURSOR;
BEGIN
  OPEN c FOR 'SELECT * FROM fdfdfdfdfd';
  CLOSE c;
END;
/
7
ответ дан 6 December 2019 в 14:04
поделиться

Вы можете использовать DBMS_SQL, чтобы получить еще большую гибкость, чем метод курсора ref, описанный Питером Лэнгом. Но это означает, что нужно больше работать.

3
ответ дан 6 December 2019 в 14:04
поделиться

Создание временных таблиц, как требуется, обычно не считается хорошей практикой в Oracle, где глобальные временные таблицы лучше и не вызовут этой проблемы

.
5
ответ дан 6 December 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: