2013-09-22 210 views
-1

我寫的更新觸發,並正與UPDATE語句掙扎:Update語句在SQL

的語句是如下:

UPDATE ARGUS_APP.CMN_REG_REPORTS CARR 
SET CARR.DATE_SUBMITTED = 
(
    SELECT To_Date(M.ACKNOWLEDGMENTHEADER.MESSAGEDATE,'YYYYMMDDHH24MISS') Messagedate 
    FROM esm_owner.MESSAGES M 
    WHERE M.ACKNOWLEDGMENTHEADER.MESSAGESENDERIDENTIFIER='PMDA' 
) 
WHERE CARR.DATE_SUBMITTED = 
(
    SELECT CARR.DATE_SUBMITTED 
    FROM esm_owner.safetyreport sr,esm_owner.MESSAGES M,ARGUS_APP.CMN_REG_REPORTS CARR 
    WHERE sr.report_id=CARR.esm_report_id 
    AND M.msg_id = sr.msg_id 
    AND M.ACKNOWLEDGMENTHEADER.MESSAGESENDERIDENTIFIER='PMDA' 
) 

我得到ORA:01427每次。

的表結構如下:

我有3個表

  1. ARGUS_APP.CMN_REG_REPORTS CARR .............具有列DATE_SUBMITTED(我想以及與安全報告的report_id聯合的esm_report_id
  2. ESM_OWNER.SAFETYREPORT SR ............具有report_id和MSG_ID列(與MESSAGES表的msg_id結合)
  3. MESSAGES M ..........有列MSG_ID和ACKNOWLEDGME NTHEADER.MESSAGESENDERIDENTIFIER

請幫我解決這個問題。

+0

你的一個子查詢將返回多行這是什麼原因造成的錯誤。從你的問題中不清楚你想如何解決這個問題。 –

+0

「消息」在「MESSAGESENDERIDENTIFIER」上不是唯一的,或者您的其他子查詢有問題...我沒有看到我們沒有更多信息可以提供幫助,我們當然不能比您更快可以爲你自己... – Ben

回答

0

我要採取野性刺法,並猜測這就是你以後的樣子。它們的關鍵特徵是將子選擇與更新相關聯(子選項中的carr參考外部語句中的表)。

Update 
    argus_app.cmn_reg_reports carr 
set 
    carr.date_submitted = (
     Select 
      To_Date(m.AcknowledgmentHeader.MessageDate, 'YYYYMMDDHH24MISS') Messagedate 
     from 
      esm_owner.Messages m 
       inner join 
      esm_owner.SafetyReport sr 
       on m.msg_id = sr.msg_id 
     where 
      carr.esm_report_id = sr.report_id And 
      m.AcknowledgmentHeader.MessageSenderIdentifier = 'PMDA' 
     ) 
Where 
    Exists (
     Select 
      'x' 
     From 
      esm_owner.Messages m 
       Inner Join 
      esm_owner.SafetyReport sr 
       on m.msg_id = sr.msg_id 
     Where 
      carr.esm_report_id = sr.report_id and 
      m.AcknowledgmentHeader.MessageSenderIdentifier = 'PMDA' 
    ) 

這裏展示的基本原理的一個例子的工作原理:

Example Fiddle

+0

這兩個子查詢返回9行,因爲我期望他們,因爲我已經使用了過濾條件'PMDA',所以我期望更新映射一對一和更新日期值。 – user2106410

+0

這個的任何可能的解決方案? – user2106410

+0

@ lAURENCE我確實設置了一個測試案例。我可以與你分享這個案例嗎? – user2106410

0

它看起來像你的子查詢的一個可能是返回數據的多行。你可以通過單獨運行來檢查它。

如果你想更新應用到所有這些,改變

... = (SELECT... 

... IN (SELECT ...