Ссылка на имя схемы в качестве переменной в Oracle - PullRequest
0 голосов
/ 18 марта 2020

Есть ли способ установить имя схемы как переменную в oracle процедуре?

создать или заменить процедуру тестом v_schema varchar2 (30);

begin

вставить в v_schema.tab_a (a, b) выбрать (a, b) из xyz;

end; /

Спасибо

1 Ответ

0 голосов
/ 19 марта 2020

Вам нужно прибегнуть к динамическим c SQL

create or replace procedure test 
is 
  v_schema varchar2(30);
  v_sql    varchar2(1000);
begin
   v_sql := 'insert into ' || v_schema || '.tab_a( a, b ) ' ||
               'select a, b from xyz';
   dbms_output.put_line( 'About to execute the statement ' || v_sql );
   execute immediate v_sql;
end; 

Пара моментов

  1. Вы почти наверняка захотите построить оператор SQL в локальной переменной, которую вы можете распечатать и / или записать в журнал перед ее выполнением. В противном случае, когда возникнут синтаксические ошибки, вам будет гораздо сложнее отладить.
  2. Вы почти никогда не захотите прибегать к Dynami c SQL. Тот факт, что у вас есть процедура, в которой вы знаете, что хотите вставить все строки из xyz в таблицу с именем tab_a, но вы не знаете, в какой схеме находится эта таблица, это красный флаг. Это необычно и часто указывает на проблему с вашим дизайном. Очень, очень редко Dynami c SQL - замечательный инструмент, когда вам нужна дополнительная гибкость. Но чаще всего, когда вы думаете о проблеме и динамике, c SQL - это ответ, который вы хотите пересмотреть.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...