By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE history (organization_id, company_id, code) AS
SELECT '123456778', '88888888888', '1234567' FROM DUAL UNION ALL
SELECT '123456778', '88888888888', '1234567' FROM DUAL UNION ALL
SELECT '123456778', '88888888888', '1234567' FROM DUAL UNION ALL
SELECT '123456778', '88888888888', '1234567' FROM DUAL UNION ALL
SELECT '123456778', '88888888888', '1234567' FROM DUAL;
5 rows affected
MERGE INTO HISTORY h
USING (
WITH data (org_id, company_id) AS (
select '3.11', '11111111' from dual union
select '3.22.3', '22222222' from dual union
select '3.44.5', '33333333' from dual
)
SELECT h.ROWID AS rid,
d.*
FROM history h
CROSS JOIN LATERAL (
SELECT *
FROM data
WHERE ROWNUM > 0
AND h.ROWID IS NOT NULL
ORDER BY DBMS_RANDOM.VALUE() DESC
FETCH FIRST ROW ONLY
) d
) d
ON ( h.ROWID = d.RID )
WHEN MATCHED THEN
UPDATE
SET ORGANIZATION_ID = d.org_id,
COMPANY_ID = d.company_id;
5 rows affected
SELECT * FROM history;
ORGANIZATION_ID | COMPANY_ID | CODE |
---|---|---|
3.44.5 | 33333333 | 1234567 |
3.11 | 11111111 | 1234567 |
3.44.5 | 33333333 | 1234567 |
3.22.3 | 22222222 | 1234567 |
3.11 | 11111111 | 1234567 |