动态SQL表名称作为变量

时间:2019-02-20 21:04:06

标签: sql oracle dynamic-sql

我有这个正在运行的过程,调用过程可以传递2个参数,并执行选择查询。

# can only change this function            
def change_generator(generator, n):
    if n % 2 == 0:
        generator.send(n + 1)

以相同的方式,我尝试添加第三个变量,它将替换表Emp,但是它不起作用,传入的表名正确率为100%。这是无效的代码(ORA-00903:无效的表名):

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');

1 个答案:

答案 0 :(得分:2)

尝试类似这样的方法: 这是由于在执行之前已对表名进行了解析。

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.