Erwarteter CLOB-Datentyp

Sep 09 2020

Ich steckte in einem Problem und habe keine Ahnung, was ich tun soll. In meiner Tabelle habe ich den Spaltentyp CLOB und in meiner verwende SELECTich diese Spalte und kann sie nicht aus der select-Anweisung entfernen.

Irgendwie versuche ich, es in VARCHAR (255) zu ändern, aber meine Tabelle enthält Daten und eine Sicherungstabelle. Die Wiederherstellung dauert einige Zeit. Bisher ist hier meine SELECT-Abfrage:

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

Dies gibt Fehler:

FEHLER in Zeile 1:
ORA-00932: Inkonsistente Datentypen: erwartet - Clob erhalten

Jeder Vorschlag und Kommentar, was zu tun ist, um diese Art von Fehlern zu beseitigen.

Antworten

2 APC Sep 09 2020 at 14:11

Sie erhalten diesen Fehler aufgrund der UNION-Klausel. UNION implementiert eine eindeutige Sortieroperation, die wir für CLOBs nicht ausführen können.

Am einfachsten ist es, zu UNION ALL zu wechseln. Dies könnte theoretisch Duplikate in die endgültige Ergebnismenge einführen, obwohl dies angesichts der WHERE-Kriterien für jede Unterabfrage unwahrscheinlich erscheint.

Alternativ sieht es so aus, als könnten Sie die UNION ganz abschaffen, indem Sie Ihre Anfrage wie folgt neu schreiben:

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  

Dieser Ansatz könnte effizienter sein.