2017-04-07 69 views
1

我有一個正常的查看和IAM收到錯誤消息避免「唯一約束」的錯誤消息:如何創建用於在視圖

[Error] Execution (6: 83): ORA-00604: error occurred at recursive SQL level 1 
ORA-00001: unique constraint (SYS.I_COL1) violated 

但我不明白我在做什麼錯。它說bacl.Description,batl.Description,bagl.description違反了唯一性約束。

CREATE OR REPLACE FORCE VIEW CCI.VW_TA04_BAC_PAGE_4_2 as 
    SELECT 
      bac.id, 
     bac.code code, 
     bacl.DESCRIPTION, 
     bac.order_key, 
     bac.bat_id, 
     batl.description, 
     bac.bag_id, 
     bagl.description, 
     bac.weight_factor, 
     bac.display 
    FROM BART_CATEGORIES bac, 
      BART_CATEGORIES_LAE bacl, 
      BART_CATEGORY_GROUPS bag, 
      BART_CATEGORY_GROUPS_LAE bagl, 
      BART_CATEGORY_TYPES bat, 
      BART_CATEGORY_TYPES_LAE batl 
    WHERE bacl.lae_id = pkg_process.language 
    AND batl.lae_id = pkg_process.language 
    AND bagl.lae_id = pkg_process.language 

    AND (bac.bag_id = bag.id) 
    AND (bac.bat_id = bat.id)  

    AND (bacl.BAC_ID = bac.id) 
    AND (bagl.BAG_ID = bag.id) 
    AND (batl.BAT_ID = bat.id) 

感謝您的任何建議。

回答

1

「它說bacl.Description,batl.Description,bagl.description違反了唯一性約束」

你的觀點有三個不同的表相同名稱的列。列名在視圖中必須是唯一的。所以你需要別名這些列。例如,這會做的伎倆:

CREATE OR REPLACE FORCE VIEW CCI.VW_TA04_BAC_PAGE_4_2 as 
SELECT 
     bac.id, 
    bac.code code, 
    bacl.DESCRIPTION as bac_description, 
    bac.order_key, 
    bac.bat_id, 
    batl.description as bat_description, 
    bac.bag_id, 
    bagl.description as bag_description, 
    bac.weight_factor, 
    bac.display 

「我因子評分寫作‘BACL’前面或就足夠了。」

我們都需要。表別名告訴SQL引擎哪個表提供引用的值,但它不是列名的一部分。

+0

有道理,我在前面寫「bacl」或者就足夠了。謝謝你的建議。 –