es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Necesidad de convertir el tipo de dato al insertar en otra tabla.

CREAR TABLA tab1
(
    e_id    VARCHAR2 (255),
    e_date  VARCHAR2 (255),
    t_ref_num  VARCHAR2 (255),
    CONSTRAINT pk_tab1 PRIMARY KEY (e_id)
);

INSERTAR EN tab1 VALORES (1, '01-01-2000', 11);
INSERTAR EN tab1 VALORES (2, '01-01-2001', 12);
INSERTAR EN tab1 VALORES (3, '01-01-2002', 13);

CREAR TABLA tab2
(
    e_id        NUMBER (20),
    e_date      FECHA,
    t_ref_num   NUMBER (20),
    CONSTRAINT pk_tab2 PRIMARY KEY (e_id)
);

Necesito insertarlo en la tabla tab2 y necesito convertir el tipo de datos según el tipo de datos de la tabla tab2. Porque en la tabla tab1 siempre obtendré el tipo de datos varchar, pero al insertarlo en la tabla tab2, tengo que realizar la conversión de tipo y tiene que insertarlo en el tipo de datos adecuado. ¿Cómo puedo lograr esto?

FUSIONAR EN tt tab2
UTILIZANDO (SELECCIONAR
           e_id, e_date, _t_ref_num
       DE tab1) t1 ON (t2.e_id = t1.e_id)

CUANDO COINCIDE LUEGO
    ACTUALIZACIÓN
        ESTABLECER tt.e_date = t1.e_date,
            tt.t_ref_num = t1.t_ref_num

CUANDO NO COINCIDA LUEGO
    INSERTAR (e_id, e_date, t_ref_num)
    VALORES (t1.e_id, TO_DATE (t1.e_date, 'DD-MM-YYYY'), t1.t_ref_num);

Tengo que realizar los cambios en la declaración de fusión solamente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir los tipos de datos durante el proceso de inserción, se pueden utilizar las funciones apropiadas para convertir explícitamente los valores en la cláusula SELECT a los tipos de datos de las columnas en la tabla de destino tab2.

    Aquí hay una declaración MERGE actualizada que convierte los valores en la cláusula SELECT para que coincidan con los tipos de datos correspondientes en la tabla tab2:

    MERGE INTO tab2 tt
    USING (
        SELECT 
            TO_NUMBER(e_id) AS e_id,
            TO_DATE(e_date, 'DD-MM-YYYY') AS e_date,
            TO_NUMBER(t_ref_num) AS t_ref_num
        FROM tab1
    ) t1 ON (tt.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);
    

    En esta declaración actualizada, utilizamos la función TO_NUMBER para convertir las columnas e_id y t_ref_num de VARCHAR2 a NUMBER, y la función TO_DATE para convertir la columna e_date de VARCHAR2 a DATE. Esto nos permite insertar los valores en la tabla tab2 con los tipos de datos correctos.

Comments are closed.