Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comparer la liste de valeurs à la table

il existe de nombreux types de collections publiques intégrées. vous pouvez en tirer parti comme ceci :

with ids as (select /*+ cardinality(a, 1) */ column_value id
               from table(UTL_NLA_ARRAY_INT(100, 200, 300)) a
            )
select ids.id, case when m.id is null then '**NO MATCH**' else m.value end value
  from ids
         left outer join my_table m
                     on m.id = ids.id;

pour voir une liste des types publics sur votre base de données, exécutez :

select owner, type_name, coll_type, elem_type_name, upper_bound, precision, scale from all_coll_types
 where elem_type_name in ('FLOAT', 'INTEGER', 'NUMBER', 'DOUBLE PRECISION')

l'indice

/*+ cardinality(a, 1) */

est simplement utilisé pour dire à oracle combien d'éléments sont dans notre tableau (s'il n'est pas spécifié, la valeur par défaut sera une hypothèse de 8k éléments). définissez simplement un nombre raisonnablement précis.