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.

Cuando ingreso registros en la tabla, está ingresando 0 registros. Aunque no hay errores.

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 )
);

Cuando inserto registros en la tabla, se insertan 0 registros. ¿Alguien puede ayudarme a entender por qué no se están insertando filas en la tabla? Básicamente, quiero insertar el identificador de búsqueda desde la tabla de referencia de búsqueda en función de la columna portal de la tabla de estadificación.

Consulta de inserción:

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 AS portal
FROM new_details_staging n CROSS JOIN lookup_ref l;

Resultado esperado:

Output

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código SQL proporcionado que podrían hacer que no se inserten registros en la tabla new_details_main:

    1. La tabla lookup_ref no tiene una columna llamada ref_typ_desc de tipo NUMBER (20). En su lugar, tiene una columna llamada ref_typ_desc de tipo VARCHAR2 (20). Esto significa que las consultas de inserción de la tabla lookup_ref necesitarían ser modificadas en consecuencia:
    INSERT INTO lookup_ref VALUES (
        181,
        'portal',
        'AA'
    );
    
    INSERT INTO lookup_ref VALUES (
        182,
        'portal',
        'BB'
    );
    
    1. La condición de unión en la consulta de inserción no es correcta. En lugar de una unión cruzada, debe unir new_details_staging con lookup_ref en las columnas portal_desc y ref_typ_desc, respectivamente:
    FROM new_details_staging n
    INNER JOIN lookup_ref l
        EN n.portal_desc = l.ref_typ_desc
        Y l.ref_typ = 'portal'
    
    1. Las subconsultas en la declaración SELECT hacen referencia al alias de tabla l, pero no ha definido ese alias en la consulta. Para solucionar esto, debe agregar el alias l a la tabla lookup_ref en la cláusula FROM:
    FROM new_details_staging n
    INNER JOIN lookup_ref l
        EN n.portal_desc = l.ref_typ_desc
        Y l.ref_typ = 'portal'
    

    Con estos cambios, la consulta de inserción completa debería verse así:

    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 l 
                WHERE l.ref_typ='portal' 
                AND l.ref_typ_desc = 'AA'
            )
            WHEN n.portal_desc = 'BB' THEN (
                SELECT l.ref_id 
                FROM lookup_ref l 
                WHERE l.ref_typ= 'portal' 
                AND l.ref_typ_desc = 'BB'
            ) 
        END
    FROM new_details_staging n
    INNER JOIN lookup_ref l
        EN n.portal_desc = l.ref_typ_desc
        Y l.ref_typ = 'portal'
    

    Esto debería insertar los registros esperados en la tabla new_details_main.

Comments are closed.