2012-12-01 27 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