-1

Update トリガーを作成していますが、Update ステートメントに苦労しています。

声明は以下のとおりです。

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とACKNOWLEDGMENTHEADER.MESSAGESENDERIDENTIFIERを持つ

これを解決するのを手伝ってください。

4

2 に答える 2

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

于 2013-09-22T17:22:16.753 に答える
0

サブクエリの 1 つがおそらく複数行のデータを返しているようです。おそらく、それぞれを単独で実行することでこれを確認できます。

それらすべてに更新を適用する場合は、

... = (SELECT...

... IN (SELECT ...
于 2013-09-22T17:32:17.543 に答える