CREATE TABLE new_details_staging (
e_id NUMBER(10),
e_name VARCHAR2(30),
portal_desc VARCHAR2(50),
CONSTRAINT pk_new_details_staging PRIMARY KEY ( e_id )
);
INSERT INTO new_details_staging VALUES (
11,
'A',
'AA'
);
INSERT INTO new_details_staging VALUES (
22,
'B',
'BB'
);
CREATE TABLE lookup_ref (
ref_id NUMBER(10),
ref_typ VARCHAR2(30),
ref_typ_desc NUMBER(20),
CONSTRAINT pk_lookup_ref PRIMARY KEY ( ref_id )
);
INSERT INTO lookup_ref VALUES (
181,
'portal',
'AA'
);
INSERT INTO lookup_ref VALUES (
182,
'portal',
'BB'
);
CREATE TABLE new_details_main (
e_id NUMBER(10),
e_name VARCHAR2(30),
portal NUMBER(20),
CONSTRAINT pk_new_details_main PRIMARY KEY ( e_id )
);
當我向表中插入記錄時,它插入了 0 條記錄。有人可以幫忙解決為什么沒有行插入到表中嗎?基本上,我想根據臨時表列portal_desc 從lookup_ref 表中填充查找ID。
插入查詢:
insert
INTO new_details_main (
e_id,
e_name,
portal
)
SELECT
n.e_id,
n.e_name,
case
WHEN n.portal_desc = 'AA' THEN (select l.ref_id from lookup_ref where l.ref_typ='portal' and l.ref_typ_desc = 'AA')
when n.portal_desc = 'BB' then (select l.ref_id from lookup_ref where l.ref_typ= 'portal' and l.ref_typ_desc = 'BB') end
FROM new_details_staging n cross join lookup_ref l;
預期產出

uj5u.com熱心網友回復:
除了 LOOKUP_REF.REF_TYP_DESC 的錯誤宣告(正如@thatjeffsmith 所指出的,它應該更改為 VARCHAR2(20))之外,在我看來,您不應該對LOOKUP_REF. 相反,我建議進行內部連接,以便您只連接您關心的行:
INSERT INTO new_details_main
(e_id, e_name, portal)
SELECT n.e_id,
n.e_name,
l.ref_id AS PORTAL
FROM new_details_staging n
INNER JOIN lookup_ref l
ON l.REF_TYP = 'portal' AND
l.REF_TYP_DESC = n.PORTAL_DESC
這會產生您想要的結果。
db<>在這里擺弄
uj5u.com熱心網友回復:
你有幾個錯誤的 INSERT
您已將 LOOKUP_REF.REF_TYPE_DESC 定義為 NUMBER(20),但隨后您嘗試將 'AA' 和 'BB' 的值插入其中。
那失敗了
ORA-01722: invalid number
然后對于您的查詢 -
SELECT
n.e_id,
n.e_name,
case
WHEN n.portal_desc = 'AA' THEN (select l.ref_id from lookup_ref where l.ref_typ='portal' and l.ref_typ_desc = 'AA')
when n.portal_desc = 'BB' then (select l.ref_id from lookup_ref where l.ref_typ= 'portal' and l.ref_typ_desc = 'BB') end
FROM new_details_staging n cross join lookup_ref l;
那些帶有 AA 和 BB 的行不能“連接”,所以結果集是空的。
讓我們嘗試解決這個問題。
ALTER TABLE LOOKUP_REF
MODIFY ( REF_TYP_DESC varchar2(20) )
Table ADMIN.LOOKUP_REF altered.
再次運行 INSERT。
INSERT INTO lookup_ref VALUES (
181,
'portal',
'AA'
);
INSERT INTO lookup_ref VALUES (
182,
'portal',
'BB'
);
1 row inserted.
Elapsed: 00:00:00.009
Copy to clipboard
Show info
1 row inserted.
Elapsed: 00:00:00.005
現在再次運行查詢 -
更近一點。你現在得到
ORA-01427: single-row subquery returns more than one row
你說:
我想根據臨時表列 portal_desc 從 lookup_ref 表中填充查找 ID
這聽起來很像應該有一個外鍵約束。然后,您將使用“子”表中的 FK 值根據匹配的“ID”在“父”表中“查找”詳細資訊。該列需要唯一或主鍵約束以確保可以只有一個匹配值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368566.html
