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

scorrendo un array per la condizione where pl/sql

Possiamo usare TABLE funzione su una collezione per ottenere un elenco di numeri/caratteri.

SELECT *
FROM TABLE ( sys.odcinumberlist(8779254,8819930,8819931) );

8779254
8819930
8819931

Qui sto usando il VARRAY interno di Oracle con un limite di 32767. Puoi usare il tuo NESTED TABLE digitare.

create OR REPLACE TYPE yourtype AS TABLE OF NUMBER;

e quindi selezionalo.

SELECT *
FROM TABLE ( yourtype(8779254,8819930,8819931) );

Quindi, la tua query può essere semplicemente scritta come

SELECT x_name
FROM table_x
WHERE x_id IN ( SELECT * FROM 
       TABLE ( yourtype(8779254,8819930,8819931) ) );

12.2 e versioni successive, non dovrai nemmeno specificare TABLE .

SELECT * FROM yourtype(8779254,8819930,8819931) funziona.