1
マージするために変換が非常に遅い以下の更新ステートメントがあります。私は次のステートメントをマージするステートメントを変更しようとしています。任意の提案マージするために自己結合アップデートを変換する
UPDATE CLASS CL
SET (PARENT_CLS_TITLE,
PARENT_SECTION_FLAG,
PARENT_ACADEMIC_CODE,
PARENT_CLASS_FL
) =
(select
PARENT.CLASS_TITLE PARENT_CLASS_TITLE
,PARENT.SECTION_FLAG PARENT_SECTION_FLAG
,PARENT.ACADEMIC_CODE PARENT_ACADEMIC_CODE
,PARENT.CLASS_FL PARENT_CLASS_FL
from CLASS CHILD
, CLASS PARENT
where CHILD.PARENT_TERM_NUMBER = PARENT.TERM_CODE || '|' ||PARENT.CLASS_NUMBER
AND CL.CRSE_ID=CHILD.CRSE_ID
AND CL.CRSE_OFFER_NUM=CHILD.CRSE_OFFER_NUM
AND CL.TERM_CODE=CHILD.TERM_CODE
AND CL.SESSION_CODE=CHILD.SESSION_CODE
AND CL.CLS_SECTION_CODE=CHILD.CLS_SECTION_CODE)
テーブルの定義とインデックス。これは私が私が正しくロジックをたどることができたことを確認していないいない他の制約など
CREATE TABLE CLASS
(
CRSE_ID VARCHAR2(255),
CRSE_OFFER_NUM VARCHAR2(255),
TERM_CODE VARCHAR2(255),
SESSION_CODE VARCHAR2(255),
CLS_SECTION_CODE VARCHAR2(255),
CLASS_NUMBER VARCHAR2(255),
PARENT_TERM_NUMBER VARCHAR2(255),
CLASS_TITLE VARCHAR2(255),
SECTION_FLAG VARCHAR2(1),
ACADEMIC_CODE VARCHAR2(255),
CLASS_FL VARCHAR2(1),
PARENT_CLS_TITLE VARCHAR2(255),
PARENT_SECTION_FLAG VARCHAR2(1),
PARENT_ACADEMIC_CODE VARCHAR2(255),
PARENT_CLASS_FL VARCHAR2(1)
);
CREATE UNIQUE INDEX IDX_CLASS ON CLASS
(CRSE_ID, CRSE_OFFER_NUM, TERM_CODE, SESSION_CODE, CLS_SECTION_CODE);
質問を編集し、すべてのデータ型、キー(プライマリ、ユニーク、および外部)とインデックスを含むCLASSテーブルの定義を含めてください。ありがとう。 –
そして、ボブの質問に対する答えに応じて、MERGEステートメントが必要ない場合もあります(ただし、この種の問題にはMERGEが最適な選択です)。たとえば、結合を介して直接テーブルを更新することができます。可能な場合には、MERGE over UPDATEを使用しなくても、時間を節約できます。 (しかし、これはCLASSテーブルでどのようなキーを使用するかによって異なります) – mathguy
私はtoadからスクリプトを提供しました。これを見ていただきありがとうございます。そのテーブルには多くの行があり、更新は永遠に実行されています。 – user1751356