Dear Experts,
copy a row and insert new row on same table when column cardnumber_hashed matches in both TEMP_BACK and MAIN_table.
CREATE TABLE TEMP_BACK
(
CARDNUMBER_HASHED VARCHAR2(30),
NEWCARDNUMBER_HASHED VARCHAR2(30),
OPERATION VARCHAR2(30)
);
Insert into TEMP_BACK (CARDNUMBER_HASHED,NEWCARDNUMBER_HASHED,OPERATION) values ('f36nha3s7JfdRcmwR+f2QuA3o7c=','JQwvV8bmSgoFzj1Q3XU9qj9u1yw=','COPY');
CREATE TABLE MAIN_table
(
CARDHOLDER_NAME VARCHAR2(30),
CARDNUMBER_HASHED VARCHAR2(30) primary key,
BIN_ID VARCHAR2(30),
OPERATION VARCHAR2(30),
EMAIL_ADDRESS VARCHAR2(30)
);
Insert into MAIN_table (CARDHOLDER_NAME,CARDNUMBER_HASHED,BIN_ID,OPERATION,EMAIL_ADDRESS) values('JOHN','f36nha3s7JfdRcmwR+f2QuA3o7c=',201604843440554,'COPY','JOHN@GMAIL.COM');
Here i tried
-------------------------
declare
begin
V_copy_DATA number;
SELECT COUNT(1)
INTO V_copy_DATA
FROM TEMP_BACK a
WHERE a.OPERATION='COPY'
AND EXISTS
(SELECT 1 FROM MAIN_table b WHERE b.CARDNUMBER_HASHED = a.CARDNUMBER_HASHED;
if V_copy_DATA>0 then
INSERT
INTO MAIN_table
(
CARDHOLDER_NAME,
CARDNUMBER_HASHED
)
SELECT CARDHOLDER_NAME,
NEWCARDNUMBER_HASHED
FROM TEMP_BACK T2
WHERE T2.OPERATION='COPY'
AND t2.CARDNUMBER_HASHED in
(SELECT CARDNUMBER_HASHED from MAIN_table);
commit;
end if;
end;
Desired output
Here i want cardnumber_hashed should be replaced as NEWCARDNUMBER_HASHED from TEMP_BACK table and insert rest of the data should remain as it is.
| CARDHOLDER_NAME | CARDNUMBER_HASHED | BIN_ID | OPERATION | EMAIL_ADDRESS | | | |
| JOHN | f36nha3s7JfdRcmwR+f2QuA3o7c= | 201604843440554 | | JOHN@GMAIL.COM | | | | | | | | | | | | | | | | | | |
| JOHN | JQwvV8bmSgoFzj1Q3XU9qj9u1yw= | 201604843440554 | COPY | JOHN@GMAIL.COM | | | | |