Interrogare una tabella Oracle con like su campo LONG

Spread the love
oracle sqldeveloper
oracle sqldeveloper

Dovevo cercare una determinata stringa in una colonna TESTO di una tabella Oracle definita come LONG (contiene informazioni di testo, XML nel mio caso). Un’operazione semplice, pensavo.

Ho utilizzato l’operatore LIKE:

SELECT ID, TESTO
FROM TEMPLATE
WHERE UPPER(TESTO) LIKE '%LOREM%'

ma con scarso successo, infatti l’errore che si è verificato è il seguente:

ORA-00932: tipi di dati incoerenti: previsto CHAR, ottenuto LONG
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:
Errore alla riga: 2, colonna: 13

Infatti non posso utilizzare l’operatore LIKE su campi LONG (in genere lo uso con i campi VARCHAR2).

Da [1] apprendo che addirittura i campi LONG non possono nemmeno comparire nelle clausole di filtro (WHERE) delle query.

Non solo.

Le colonne di tipo LONG non possono comparire in vincoli di integrità (fatta eccezione per NULL/NOT NULL).

Le colonne di tipo LONG non possono comparire in una espressione regolare.

Ogni tabella può avere al più una colonna di tipo LONG.

Eccetera.

Insomma una serie di condizioni molto vincolanti. Ma soprattutto non posso cercare il testo che voglio.

Il tipo LONG è tuttavia un tipo di dato deprecato in favore del tipo CLOB, atto a contenere testo che eccede i 4000 byte

Sempre in [1] trovo la soluzione: occorre trasformare il dato in un Large Object (LOB). Creo quindi una nuova tabella così:

CREATE TABLE ZZZ_TEMPLATE AS
SELECT ID, TO_LOB(TESTO) AS TESTO
FROM TEMPLATE;

-- Creato table ZZZ_TEMPLATE.

Dunque posso eseguire la query:

SELECT * FROM zzz_template
WHERE UPPER(TESTO) LIKE '%LOREM%';

--
137	"<?xml version="1.0" encoding="ISO-8859-1"?>..."
312	"<?xml version="1.0" encoding="ISO-8859-1"?>..."
311	"<?xml version="1.0" encoding="ISO-8859-1"?>..."
310	"<?xml version="1.0" encoding="ISO-8859-1"?>..."

Risorse web

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.