Tipo de datos CLOB esperado

Sep 09 2020

Me he quedado atascado en un problema y no tengo ni idea de qué hacer. En mi tabla tengo el tipo de columna CLOB y en mi SELECTuso esta columna y no puedo eliminar de la declaración de selección.

De alguna manera trato de cambiarlo a VARCHAR (255) pero mi tabla contiene datos y una tabla de respaldo y nuevamente la restauración me llevará tiempo. Hasta ahora, aquí está mi consulta SELECT:

SELECT * FROM 
   (SELECT a.*,
           df.Name AS PaymentTypeName 
    FROM  ata a 
    INNER JOIN debitform df ON a.PaymentType = df.Id 
    WHERE a.Deviation = '1' 
    AND a.ProjectID = 141 
    AND a.ParentAta = '0' 
    AND TYPE = 1 
    UNION 
    SELECT a.*,  
           df.Name AS PaymentTypeName 
    FROM  ata a 
    INNER JOIN debitform df ON a.PaymentType = df.Id 
    WHERE a.Deviation = '1' 
    AND a.ProjectID = 141 
    AND a.ParentAta = '0' 
    AND TYPE = 0 
    AND a.BecomeExternalAtaFromInternal = 1) a

Esto da error:

ERROR en la línea 1:
ORA-00932: tipos de datos inconsistentes: esperado - consiguió clob

Cualquier sugerencia y comentario sobre qué hacer para eliminar este tipo de errores.

Respuestas

2 APC Sep 09 2020 at 14:11

Recibe este error debido a la cláusula UNION. UNION implementa una operación de ordenación distinta, y no podemos hacerlas en CLOB.

La opción más sencilla es cambiar a UNION ALL. En teoría, esto podría introducir duplicados en el conjunto de resultados final, aunque parecería poco probable dados los criterios WHERE para cada subconsulta.

Alternativamente, parece que puede eliminar la UNIÓN por completo, reescribiendo su consulta de esta manera:

SELECT * FROM 
   (SELECT a.*,
           df.Name AS PaymentTypeName 
    FROM  ata a 
    INNER JOIN debitform df ON a.PaymentType = df.Id 
    WHERE a.Deviation = '1' 
    AND a.ProjectID = 141 
    AND a.ParentAta = '0' 
    AND (TYPE = 1 
         OR (TYPE = 0 
             AND a.BecomeExternalAtaFromInternal = 1)
        )
    )a  

Este enfoque podría ser más eficaz.