插入其他数据时需要转换数据类型table
Need to convert the data type while inserting into the other table
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 table 中,并且需要根据 tab2 table 数据类型转换数据类型。因为在 tab1 table 中,我将始终获得 varchar 数据类型,但是在插入到 tab2 table 中时,我必须对其进行类型转换,并且必须插入正确的数据类型。我怎样才能做到这一点?
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);
我只需在合并语句中进行更改。
在 USING
子句中执行此操作。
设置日期格式(让你知道什么是什么;你不必这样做):
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
在 e_date
上使用带有适当格式掩码的 TO_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>
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 table 中,并且需要根据 tab2 table 数据类型转换数据类型。因为在 tab1 table 中,我将始终获得 varchar 数据类型,但是在插入到 tab2 table 中时,我必须对其进行类型转换,并且必须插入正确的数据类型。我怎样才能做到这一点?
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);
我只需在合并语句中进行更改。
在 USING
子句中执行此操作。
设置日期格式(让你知道什么是什么;你不必这样做):
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
在 e_date
上使用带有适当格式掩码的 TO_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>