CREATE TABLE IF NOT EXISTS new_details_staging
(
e_id NUMBER(10),
e_name VARCHAR2(30),
portal_desc VARCHAR2(50),
risk_dec VARCHAR2(50),
CONSTRAINT pk_new_details_staging PRIMARY KEY (e_id)
);
INSERT IGNORE INTO new_details_staging
VALUES (11, 'A', 'AA', 'High');
INSERT IGNORE INTO new_details_staging
VALUES (22, 'B', 'BB', 'Low');
CREATE TABLE IF NOT EXISTS lookup_ref
(
ref_id NUMBER(10),
ref_typ VARCHAR2(30),
ref_typ_desc VARCHAR2(20),
CONSTRAINT pk_lookup_ref PRIMARY KEY (ref_id)
);
INSERT IGNORE INTO lookup_ref
VALUES (181, 'portal', 'AA');
INSERT IGNORE INTO lookup_ref
VALUES (182, 'portal', 'BB');
INSERT IGNORE INTO lookup_ref
VALUES (183, 'risk', 'High');
INSERT IGNORE INTO lookup_ref
VALUES (184, 'risk', 'Low');
CREATE TABLE IF NOT EXISTS new_details_main
(
e_id NUMBER(10),
e_name VARCHAR2(30),
portal NUMBER(20),
risk NUMBER(20),
CONSTRAINT pk_new_details_main PRIMARY KEY (e_id)
);
COMMIT;
Моя попытка:
INSERT IGNORE INTO new_details_main (e_id, e_name, portal,risk)
SELECT
n.e_id,
n.e_name,
(SELECT lr.ref_id
FROM lookup_ref lr
WHERE lr.ref_typ = 'portal'
AND lr.ref_typ_desc = n.portal_desc),
(SELECT lr.ref_id
FROM lookup_ref lr
WHERE lr.ref_typ = 'risk'
AND lr.ref_typ_desc = n.risk_dec)
FROM
new_details_staging n;
В настоящее время я вставляю несколько записей, и это дает точные результаты, но на самом деле есть записи 40k+, поэтому я считаю, что это также приведет к проблемам с производительностью. Есть ли какой-нибудь способ вставить записи быстрее, потому что я напишу процедуру для этой вставки? Есть ли какой-либо другой способ, с помощью которого я могу написать запрос на вставку внутри процедуры?