В PL / SQL я могу передать схему таблицы предложения курсора FROM через параметр хранимой процедуры? - PullRequest
3 голосов
/ 10 ноября 2008

В PL / SQL я хотел бы передать схему «источника» в качестве параметра хранимой процедуре. Например:

BEGIN
    CURSOR my_cursor IS
      SELECT my_field FROM <schema>.my_table
...

Я хочу, чтобы значение 'схемы' поступало из входного параметра в хранимую процедуру. Кто-нибудь знает, как я мог это сделать?

P.S. Извините, если это глупый простой вопрос, но я новичок в PL / SQL и должен быстро написать некоторые функции.

Ответы [ 2 ]

8 голосов
/ 10 ноября 2008

В дополнение к тому, что сказал Марк Брэйди, другой вариант динамического SQL - использовать REF CURSOR. Поскольку ваш пример кода содержит курсор, это будет наиболее актуально.

PROCEDURE select_from_schema( the_schema VARCHAR2)
IS
  TYPE my_cursor_type IS REF CURSOR;
  my_cursor  my_cursor_type;
BEGIN
  OPEN my_cursor FOR 'SELECT my_field FROM '||the_schema||'.my_table';

  -- Do your FETCHes just as with a normal cursor

  CLOSE my_cursor;
END;
3 голосов
/ 10 ноября 2008

Это должно быть сделано с динамическим SQL.

Либо пакет DBMS_SQL, либо оператор Execute Immediate.

Нельзя использовать переменные в предложении FROM.

Потенциальным решением может быть

ALTER SESSION SET Current_Schema = '' <- схема, которую вы хотите. </p>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...