Pl / Sql中架构名称的占位符

时间:2012-12-01 07:45:34

标签: oracle plsql plsqldeveloper

我有一个简单的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。 我的问题是:我可以为模式名称设置参数或占位符(用于删除硬编码模式的名称)?

1 个答案:

答案 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;