2011-09-27 68 views
3

我必須解決使用Oracle數據庫的問題。架構名稱與表名 - 如何避免衝突?

在Oracle數據庫有兩種模式:XXX和YYY

架構XXX包含一個表名爲YYY(相同的名稱作爲第二個模式)。

模式YYY包含一些序列(讓我們說序列ZZZ)和日誌表,我需要使用模式XXX中的觸發器。

但是當我嘗試使用這種結構來寫觸發器在表XXX.some_table:

SELECT YYY.ZZZ.NEXTVAL INTO AAA FROM DUAL 

甲骨文認爲YYY在XXX架構和顯示錯誤消息 表「組件ZZZ必須聲明」。對於XXX用戶訪問YYY.ZZZ序列有適當的權限設置,但它是無用的。

如何避免這種情況?不幸的是數據庫的結構已經設置好了,不能改變。

回答

6

你可以編寫觸發代碼,所以你有一些控制數據庫。那很好。

我建議你使用同義詞角落找尋這個工作:

create synonym yyy_zzz_seq for yyy.zzz; 

然後,您應該能夠引用同義詞在觸發:

SELECT yyy_zzz_seq.NEXTVAL INTO AAA FROM DUAL 
+0

沒錯,這正常工作。非常感謝你。 – Gil