У меня есть вопрос относительно того, если иначе ветвление в процедуре оракула. поэтому у меня есть этот запрос,ORACLE IF-ELSE Ветвление осложнения
CREATE OR REPLACE PROCEDURE WELTESADMIN.SP_MST_ERC_UPD
(
p_HEAD_MARK IN VARCHAR2,
p_PROJECT_NAME IN VARCHAR2,
p_COMP_TYPE IN VARCHAR2,
p_ONSITE_UPD_QTY IN INTEGER,
p_PREP_UPD_QTY IN INTEGER,
p_ERECT_UPD_QTY IN INTEGER,
p_QC_UPD_QTY IN INTEGER,
p_UPD_SIGN IN VARCHAR
)
AS
/* IF NOT THEN.. ; WHEN THE RECORD EXISTS DO THIS... */
BEGIN
UPDATE MST_ERC_UPD
SET
ONSITE_UPD_QTY = p_ONSITE_UPD_QTY,
PREP_UPD_QTY = p_PREP_UPD_QTY,
ERECT_UPD_QTY = p_ERECT_UPD_QTY,
QC_UPD_QTY = p_QC_UPD_QTY
WHERE
HEAD_MARK = p_HEAD_MARK AND
PROJECT_NAME = p_PROJECT_NAME AND
COMP_TYPE = p_COMP_TYPE;
INSERT INTO DTL_ERC_UPD (/* THIS ACTS AS A HISTORY TABLE THAT RECORDS EVERY OCCURENCE */
HEAD_MARK, PROJECT_NAME, COMP_TYPE,
ONSITE_UPD_QTY, PREP_UPD_QTY, ERECT_UPD_QTY, QC_UPD_QTY,
UPD_DATE, UPD_SIGN, UPD_INFO
) VALUES (
p_HEAD_MARK, p_PROJECT_NAME, p_COMP_TYPE,
p_ONSITE_UPD_QTY, p_PREP_UPD_QTY, p_ERECT_UPD_QTY, p_QC_UPD_QTY,
SYSDATE, p_UPD_SIGN, 'UPDATE'
);
/* WHEN THE RECORD IS NOT EXISTS DO THIS */
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO MST_ERC_UPD
(
HEAD_MARK, PROJECT_NAME, COMP_TYPE,
ONSITE_UPD_QTY, PREP_UPD_QTY, ERECT_UPD_QTY, QC_UPD_QTY
)
VALUES
(
p_HEAD_MARK, p_PROJECT_NAME, p_COMP_TYPE,
p_ONSITE_UPD_QTY, p_PREP_UPD_QTY, p_ERECT_UPD_QTY, p_QC_UPD_QTY
);
/* THIS ACTS AS A HISTORY TABLE THAT RECORDS EVERY OCCURENCE */
INSERT INTO DTL_ERC_UPD
(
HEAD_MARK, PROJECT_NAME, COMP_TYPE,
ONSITE_UPD_QTY, PREP_UPD_QTY, ERECT_UPD_QTY, QC_UPD_QTY,
UPD_DATE, UPD_SIGN, UPD_INFO
)
VALUES
(
p_HEAD_MARK, p_PROJECT_NAME, p_COMP_TYPE,
p_ONSITE_UPD_QTY, p_PREP_UPD_QTY, p_ERECT_UPD_QTY, p_QC_UPD_QTY,
SYSDATE, p_UPD_SIGN, 'NEWENTRY'
);
END IF;
COMMIT;
END SP_MST_ERC_UPD;
Так что проблема с моим разветвленности здесь, Кусок запроса, когда не существует запись не выполняется (Новая вставка со статусом «NEWENTRY» никогда не получите выполнения). Пожалуйста, помогите мне с этой разветвлений проблемы ... спасибо
Использование отладки, чтобы увидеть, что происходит с SQL% что-то вроде 'DBMS_OUTPUT. PUT_LINE (SQL% ROWCOUNT); 'перед этим if. Do'nt забудьте включить вывод –
Так что я уже отлаживаю каждое поведение, единственная проблема - вставка после обновления (2-й блок) –