CREATE TABLE tab1
(
e_id VARCHAR2(255),
e_date VARCHAR2(255),
t_ref_num VARCHAR2(255),
CONSTRAINT pk_tab1 PRIMARY KEY ( e_id )
);
INSERT INTO tab1 VALUES (1, '01-01-2000', 11);
INSERT INTO tab1 VALUES (2, '01-01-2001', 12);
INSERT INTO tab1 VALUES (3, '01-01-2002', 13);
CREATE TABLE tab2
(
e_id NUMBER(20),
e_date DATE,
t_ref_num NUMBER(20),
CONSTRAINT pk_tab2 PRIMARY KEY ( e_id )
);
我需要將它插入到 tab2 表中,并需要根據 tab2 表資料型別轉換資料型別。因為在 tab1 表中,我將始終獲得 varchar 資料型別,但是在插入 tab2 表時,我必須對其進行型別轉換,并且必須插入正確的資料型別。我怎樣才能做到這一點?
MERGE INTO tab2 tt
USING (SELECT
e_id, e_date, _t_ref_num
FROM tab1) t1 ON ( t2.e_id = t1.e_id )
WHEN MATCHED THEN
UPDATE
SET tt.e_date = t1.e_date,
tt.t_ref_num = t1.t_ref_num
WHEN NOT MATCHED THEN
INSERT (e_id, e_date, t_ref_num)
VALUES (t1.e_id, t1.e_date, t1.t_ref_num);
我只需要在合并陳述句中進行更改。
uj5u.com熱心網友回復:
在USING條款中這樣做。
設定日期格式(以便您知道什么是什么;您不必這樣做):
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
使用TO_DATE適當的格式掩碼e_date;t_ref_num看起來像一個普通的整數,所以我只是TO_NUMBER-ing 它。
SQL> MERGE INTO tab2 tt
2 USING (SELECT e_id,
3 TO_DATE (e_date, 'dd-mm-yyyy') e_date,
4 TO_NUMBER (t_ref_num) t_ref_num
5 FROM tab1) t1
6 ON (tt.e_id = t1.e_id)
7 WHEN MATCHED
8 THEN
9 UPDATE SET tt.e_date = t1.e_date, tt.t_ref_num = t1.t_ref_num
10 WHEN NOT MATCHED
11 THEN
12 INSERT (e_id, e_date, t_ref_num)
13 VALUES (t1.e_id, t1.e_date, t1.t_ref_num);
3 rows merged.
結果:
SQL> select * from tab2;
E_ID E_DATE T_REF_NUM
---------- ---------- ----------
3 01.01.2002 13
1 01.01.2000 11
2 01.01.2001 12
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367881.html
