У меня есть таблица определяется следующим образом:Oracle обновление существующей записи или вставить новый
CIC3.WBCOURSEACTIVITY
(
WCA_RID NUMBER,
WCA_TNA_ID NUMBER,
WCA_REG_RID NUMBER,
WCA_ANSWERED_PTS NUMBER,
WCA_TOTAL_PTS NUMBER,
WCA_TITLE VARCHAR2(50 BYTE)
)
Я хочу обновить любую запись, где я отправляю тот же WCA_TNA_RID и WCA_REG_RID комбинацию, которая уже существует в противном случае, я хочу, чтобы вставить новая запись. У меня есть последовательность на WCA_RID
Означает ли это, что это будет трюк или может быть лучше?
CREATE OR REPLACE procedure CIC3.f_savewbpoints(pParticipantID number, pRegRid number, pAnsweredPoints number, pTotalPoints number, pTitle VARCHAR2) is
vWcaRid number;
begin
SELECT DISTINCT wca_rid INTO vWcaRid
FROM wbcourseactivity
WHERE wca_reg_rid = pRegRid
AND wca_tna_id = pParticipantID;
UPDATE wbcourseactivity
SET wca_answered_pts = pAnsweredPoints
, wca_totalPts = pTotalPoints
, wca_title = pTitle
WHERE wca_rid = vWcaRid
IF (NVL(SQL%ROWCOUNT, 0) = 0) THEN
INSERT INTO wbcourseactivity (wca_tna_id
, wca_reg_rid
, wca_answered_pts
, wca_total_pts
, wca_title)
VALUES
(pParticipantID
, pRegRid
, pAnsweredPoints
, pTotalPoints
, pTitle);
END IF;
commit;
end;
/
кстати 'IF (NVL (SQL% ROWCOUNT, 0) = 0)' можно упростить 'если SQL% ROWCOUNT = 0 '. Он не может иметь значение null, следующее за оператором SQL. –