我有一个简单的Pl/Sql
正文如下:
begin
------------------- deletes -------------------------
delete from ticket.KC4ENTKEY where KC2ENTID200 in ('ETICKET');
------------------- inserts -------------------------
insert into host.kc4achmap(kc4srl467,kc4hst468,kc4id455)
values('AUTHENTICATION',1,'TICKET');
end;
我可能会更改样本的架构名称,ticket
架构可能会更改为ticket_2
。
我的问题是:我可以为模式名称设置参数或占位符(用于删除硬编码模式的名称)?
答案 0 :(得分:3)
您不能拥有模式名称(或表名或列名)的占位符,因为Oracle会在编译时检查架构/表/列是否存在以及您是否有权访问它。
为了增加灵活性,您可以通过同义词或视图添加间接层:
CREATE SYNONYM my_kc4entkey FOR ticket.kc4entkey;
CREATE SYNONYM my_kc4achmap FOR host.kc4achmap;
在您的代码中,您将引用同义词而不是完全限定的表:
begin
delete from my_kc4entkey where kc2entid200 in ('ETICKET');
insert into my_kc4achmap(kc4srl467,kc4hst468,kc4id455) values('AUTHENTICATION',1,'TICKET');
end;
如果您稍后需要更改架构名称,则只需更改同义词并保持代码不变:
CREATE OR REPLACE SYNONYM my_kc4entkey FOR ticket2.kc4entkey;