Sto affrontando un problema di progetto di cui sto lavorando, non posso darvi codice vero e proprio, ma ho creato un codice di esempio eseguibile come di seguitoSELECT da tavolo con variano in lista nella clausola WHERE
Qui temp
e temp_id
sono due tavoli
temp
tabella contiene elenco separato da virgole ids quali èVARCHAR2
temp_id
tabella contiene ids reale che èNUMBER
voglio righe dalla tabella temp_id
cercare ottenendo ids
da virgole elenco di ID separato da temp
tavolo
//DDLs to create table
CREATE TABLE temp(ids VARCHAR2(4000));
CREATE TABLE temp_id(data_id NUMBER);
//DMLs to populate test data
INSERT INTO temp VALUES('1, 2, 3');
INSERT INTO temp_id VALUES(1);
INSERT INTO temp_id VALUES(2);
INSERT INTO temp_id VALUES(3);
INSERT INTO temp_id VALUES(4);
INSERT INTO temp_id VALUES(5);
Questa query non funziona
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE(SELECT ids FROM temp));
interrogazione lavoro
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE('1, 2, 3'));
Qui la differenza tra due query di cui sopra è che sto usando la colonna dalla tabella temp
nella prima query e diretta citata varchar2
nella seconda query. Non capisco perché non funziona? Mi manca qualcosa? Penso che potrebbe esserci qualche discrepanza tra i tipi di dati, ma non siamo in grado di capirlo.
'1, 2, 3' non è un numero valido, è una stringa! – SMA
Ho fatto 'to_number (COLUMN_VALUE)'. È possibile controllare la seconda query funziona. – eatSleepCode
Si tratta di un problema di 'Liste di liste IN'. Vedi la mia risposta. –