1

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

4

1 回答 1

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;
于 2012-12-01T09:24:38.583 回答