简体   繁体   English

动态SQL表名称作为变量

[英]Dynamic SQL table name as variable

I have this procedure which is working, 2 parameters can be passed when calling procedure and it executes the select query. 我有这个正在运行的过程,调用过程时可以传递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');

In the same way I try to add third variable which will replace the table Emp, but it doesn't work, passed in table name is 100% correct. 以相同的方式,我尝试添加第三个变量,它将替换表Emp,但它不起作用,传入的表名是100%正确的。 This is the code that doesn't work (ORA-00903: invalid table name): 这是无效的代码(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');

Try something like this: Its due to the parsing of the table name before execution. 尝试执行以下操作:这是由于在执行之前解析了表名。

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.   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM