Oracle
 sql >> Database >  >> RDS >> Oracle

Perché ottengo ORA-00932:tipi di dati incoerenti:previsto - ottenuto - quando utilizzo COLLECT() in un'istruzione preparata?

Finalmente ho trovato una soluzione a questo problema, grazie ad alcuni scavi da parte di un utente. Il problema non era con il segnaposto; perché ha funzionato senza il segnaposto sull'immagine VirtualBox non ne ho idea. No, il problema riguardava COLLECT() . Sembra che sia necessario eseguire il cast di entrambi i valori raccolti su un tipo specifico, e l'array risultante deve anche essere convertito in un tipo di dati array predefinito. Accade solo che il mio codice abbia un tipo di array personalizzato:

CREATE TYPE sqitch_array AS varray(1024) OF VARCHAR2(512);

Quindi sono in grado di far funzionare la query eseguendo il casting di COLLECT() così:

CAST(COLLECT(CAST(t.tags as VARCHAR2(512))) AS sqitch_array)