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;
Benim girişimim:
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;
Şu anda birkaç kayıt ekliyorum ve kesin sonuçlar veriyor ancak gerçekte 40k+ kayıt var, bu yüzden performans sorunları da vereceğine inanıyorum. Bu ekleme için bir yordam yazacağım için kayıtları daha hızlı eklemenin bir yolu var mı? Prosedürün içine bir ekleme sorgusu yazabileceğim başka bir şey var mı?