Oracle de la collection dans la clause where
Je suis à l'aide de la collection dans un oracle bloc de code, car il n'y a pas de table variable(comme dans MS SQL Server).
DECLARE
TYPE I_NAME IS TABLE OF NVARCHAR2(512);
I_ITEMNAME I_NAME := I_NAME();
BEGIN
Je suis à l'aide de "VRAC RECUEILLIR DANS I_ITEMNAME" pour combler la collection.
Je veux utiliser cette collection dans la clause where dans une requête SELECT, mais pas en mesure de trouver la méthode pour le faire. Actuellement je l'ai et de l'aide POUR la boucle et l'obtention de l'élément un par un.
Comment puis-je utiliser de la collection directement dans la clause where quelque chose comme
SÉLECTIONNEZ * À PARTIR DE TBL OÙ LE COL À I_ITEMNAME?
Merci,
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser déclarés localement collection dans une clause SQL:
Mais vous pouvez si elle est déclarée dans le schéma de niveau, essentiellement afin de SQL connaît le type, pas seulement PL/SQL:
Vous pouvez aussi rejoindre le
table
construire plutôt que d'utiliser une sous-requête:Je ne suis pas tout à fait clair ce que vous êtes dong si. (Si vous n'êtes pas à l'aide de la collection pour autre chose, vous feriez mieux de rejoindre les données brutes, mais je suppose que la collection est là pour une bonne raison).
Comme @haki mentionné dans les commentaires, vous pouvez aussi le faire:
... tant que
i_name
et de la colonne que vous êtes en comparant avec sont du même type. Dans mon exemple, il trouve des lignes nulles parce que je suis en train de comparernvarchar2
avecvarchar2
, mais serait de trouver un match si redéfinii_name
commevarchar2(512)
. Dans votre cas, sans doutetab.col
estnvarchar2
de toute façon.select count(*) from all_tables where owner member of (i_itemname)
.i_type
commenvarchar2
maisowner
estvarchar2
, mais c'est chouette sii_type
est redéfini de façon à correspondre. (J'ai ajouté qu'à ma réponse, mais si vous publiez votre propre réponse avec qui je vais l'enlever; ne cherche pas à prendre de crédit!)