Динамическое имя таблицы SQL как переменная - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть эта процедура, которая работает, 2 параметра могут быть переданы при вызове процедуры, и она выполняет запрос выбора.

create or replace procedure dynamic_sql
(input1 varchar2, input2 varchar2)
as begin
execute immediate
'select :variable1, :variable2 from emp'
using input1,input2;
end;
/
exec dynamic_sql('ename','job');

Таким же образом я пытаюсь добавить третью переменную, которая заменит таблицуEmp, но это не работает, передано в имени таблицы на 100% правильно.Это код, который не работает (ORA-00903: неверное имя таблицы):

create or replace procedure dynamic_sql
(input1 varchar2, input2 varchar2,input_table varchar2)
as begin
execute immediate
'select :variable1, :variable2 from :variable3'
using input1,input2,input_table;
end;
/
exec dynamic_sql('ename','job','emp');

1 Ответ

0 голосов
/ 21 февраля 2019

Попробуйте что-то вроде этого: Это связано с разбором имени таблицы перед выполнением.

create or replace procedure dynamic_sql
(input1 varchar2, input2 varchar2,input_table varchar2)
as
str varchar2(1000) := NUll; 
begin
str := 'select '||input1||','|| input2 ||' from '||input_table;
execute immediate str;
end;
/
exec dynamic_sql('ename','job','emp');

Procedure created.
 PL/SQL procedure successfully completed.   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...