我有一个存储过程,需要在2个模式名称之间“切换”。 这是一个示例:
declare
schema1 varchar2(16) := 'left';
schema2 varchar2(16) := 'right';
begin
if (some condition) then
select * from ???schema1???.tbl1 where id = 1;
else
select * from ???schema2???.tbl1 where id = 1;
end if;
end;
如何让变量(例如schema1
)的值充当源代码的一部分?我的意思是该代码将被理解为:
...
select * from left.tbl1 where id = 1;
else
select * from right.tbl1 where id = 1;
...
答案 0 :(得分:1)
如果要使用变量进行模式引用,则必须使用动态sql,
declare
schema1 varchar2(16) := 'left';
schema2 varchar2(16) := 'right';
myVar varchar2(100);
begin
if (some condition) then
execute immediate 'select * from ' || schema1 || '.tbl1 where id = 1' into myVar;
else
execute immediate 'select * from ' || schema2 || '.tbl1 where id = 1' into myVar;
end if;
end;