2012-12-01 29 views
1

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

回答

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; 
+0

这是一个很好的答案。谢谢。 – MJM