我有以下更新语句,执行速度非常慢,无法转换为合并。我正在尝试将以下语句更改为merge语句。任何建议
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);
答案 0 :(得分:0)
我不确定我是否能够正确地遵循逻辑,但我相信下面的陈述在逻辑上等同于您原来的陈述。试一试,让我们知道。
UPDATE CLASS CL
SET ( PARENT_CLS_TITLE ,
PARENT_SECTION_FLAG ,
PARENT_ACADEMIC_CODE,
PARENT_CLASS_FL
) =
( select CLASS_TITLE ,
SECTION_FLAG ,
ACADEMIC_CODE,
CLASS_FL
from CLASS
where CL.PARENT_TERM_NUMBER = TERM_CODE || '|' || CLASS_NUMBER
)
;
当然,您发布的内容并不能保证子查询返回单行。如果它返回多行,则更新将失败。 (对于你的原始陈述也是如此。)也许在你的数据中,子查询只返回一行 - 只是它不一定跟你所提供的信息一致。