插入其他数据时需要转换数据类型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_DATEt_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>