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.

ORA-00932 al ejecutar BULK COLLECT

Estoy recibiendo un error: ORA-00932: tipos de datos inconsistentes: se esperaba - se obtuvo -.
No hay información sobre qué tipo es inconsistente. Solo veo -. ¿Hay alguna forma de verificarlo?
El código a continuación está simplificado:

create type IMPORT_R as object (
  ID int,
  IMPORT1_ID int,
  IMPORT2_ID int,
  PROD_ID int
);
create type IMPORT_T as table of IMPORT_R;

CREATE FUNCTION GetImport(
  id IN BINARY_INTEGER, 
  id2 IN BINARY_INTEGER, 
  id3 IN BINARY_INTEGER) 
return IMPORT_T
IS
  sqlCommand VARCHAR2(32000);
  v_Result IMPORT_T;
begin
    sqlCommand :=
        'SELECT ID, IMPORT1_ID, IMPORT2_ID, PROD_ID
        FROM 
        (
            SELECT ID,
                   IMPORT1_ID,
                   -1 AS IMPORT2_ID,
                   PROD_ID                
              FROM TABLE1
              WHERE IMPORT1> '|| id1;


    IF id := 123 THEN    
        sqlCommand := sqlCommand||
        'UNION
        SELECT ID,
               -1 AS IMPORT1_ID,
               IMPORT2_ID,
               PROD_ID               
          FROM TABLE2
          WHERE IMPORT2> '|| id2;
    END IF;

    sqlCommand := sqlCommand||')' ;

    EXECUTE IMMEDIATE sqlCommand BULK COLLECT INTO v_Result;

    return v_Result;
end;

El error ocurre en la línea donde se ejecuta EXECUTE IMMEDIATE.
¿Alguna pista? ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error es causado por los tipos de datos inconsistentes de las columnas en la declaración SELECT. Específicamente, la columna IMPORT2_ID en la primera instrucción SELECT está definida como int, mientras que en la segunda instrucción SELECT está definida como -1. Esto hace que se produzca el error ORA-00932.

    Para verificar qué tipo es inconsistente, puede agregar una declaración de depuración después de que se concatena la instrucción SQL. Por ejemplo, puede agregar:

    DBMS_OUTPUT.PUT_LINE(sqlCommand);

    Esto mostrará la declaración SQL completa en la consola, lo que le permitirá ver el tipo de datos inconsistente específico.

    Para corregir el error, debe asegurarse de que los tipos de datos de todas las columnas en la declaración SELECT sean consistentes. Una opción es usar NULL en lugar de -1 para indicar un valor faltante. Otra opción es convertir -1 al tipo de datos apropiado, como int o number.

Comments are closed.