SELECT da tabela com a lista Varying IN na cláusula WHERE
Estou enfrentando um problema no projeto em que estou trabalhando, não posso fornecer o código real, mas criei um código de exemplo executável como abaixo
Aquitemp
etemp_id
são duas mesas
temp
A tabela contém uma lista de IDs separados por vírgula, que éVARCHAR2
temp_id
tabela contém os IDs reais que sãoNUMBER
Quero pesquisar linhas detemp_id
tabela obtendoids
da lista separada por vírgula de IDs detemp
mesa
//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);
Esta consulta não funciona
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE(SELECT ids FROM temp));
Consulta de trabalho
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE('1, 2, 3'));
Aqui diferença entre as duas consultas acima é que eu estou usando a coluna detemp
tabela na primeira consulta e aspas diretasvarchar2
na segunda consulta. Não está entendendo o motivo pelo qual não está funcionando? Estou faltando alguma coisa? Eu acho que pode haver alguma incompatibilidade de tipo de dados, mas não é possível descobrir isso.