Oracle: dividir cadena a filas

Tomemos esta consulta:

WITH temp as SELECT '123455' colum from dual SELECT * FROM big_table WHERE cod IN (SELECT colum from temp) UNION ALL SELECT * FROM big_table2 WHERE cod IN (SELECT colum from temp) 

Me gustaría search una list de valores, así como también puedo search uno, pero ¿cómo puedo crear una list de filas sin tener que escribir mucho sobre UNION?

Si tiene disponible un tipo de tabla de cadenas, la siguiente secuencia de commands puede hacer lo que quiera.

 create table big_table ( cod varchar2(4000) ); create table big_table2 ( cod varchar2(4000) ); insert into big_table (cod) values ('12345'); insert into big_table (cod) values ('12346'); insert into big_table (cod) values ('12347'); insert into big_table (cod) values ('12345'); insert into big_table (cod) values ('12348'); insert into big_table (cod) values ('12349'); --Example usage of the custom defined type stringarray SELECT column_value from table(stringarray('12345','12348')); WITH temp as (SELECT column_value from table(stringarray('12345','12348'))) SELECT * FROM big_table WHERE cod IN (SELECT column_value from temp) UNION ALL SELECT * FROM big_table2 WHERE cod IN (SELECT column_value from temp); drop table big_table; drop table big_table2; 

Puede crear el tipo de stringarray como este

 CREATE OR REPLACE TYPE STRINGARRAY as table of varchar2(30) 

Espero haber respondido a su pregunta.

No estoy seguro de si Oracle lo admite (o si esto es exactamente lo que está preguntando), pero si es como DB2, puede usar su Common Table Expression para build su list de valores de esta manera …

 WITH temp (colum) as (VALUES '123456', '789012', '345678') SELECT * FROM big_table WHERE cod IN (SELECT colum from temp) UNION ALL SELECT * FROM big_table2 WHERE cod IN (SELECT colum from temp) 

En cuanto a no tener que escribir un montón de SINDICATOS, no creo que haya una mejor manera de hacer lo que estás pidiendo …

Si está buscando varias tablas, no puede evitar el uso de UNION si desea hacerlo en una sola operación de set.

De lo contrario, puede pasar una matriz de nombres de tabla a un bucle, y simplemente escribir dinámicamente y luego ejecutar el sql. Preferiría hacer uniones, personalmente …