Oracle CLAUSE De question lors de l'utilisation avec plusieurs valeurs, le rendant dynamique
Je viens de passer une heure sur google et ici, en essayant d'obtenir une réponse claire de la façon de faire dans Oracle. Ce dont j'ai besoin est la capacité à utiliser sélectionnez dans la clause qui construit automatiquement comme
select col1 from table1 where id.table IN ('1','2','3');
où les valeurs d'id sont transmis à la procédure stockée à l'intérieur du tableau. Le tableau associatif a été définie comme suit:
TYPE varchar_array_type IS TABLE OF VARCHAR2 (40) INDEX BY BINARY_INTEGER;
Est-il simple, de béton moyen de le faire? grâce
OriginalL'auteur sarsnake | 2010-12-15
Vous devez vous connecter pour publier un commentaire.
Malheureusement, si votre type de collection est définie en PL/SQL (plutôt que SQL), vous ne pouvez pas l'utiliser dans SQL, car le moteur SQL ne sais pas comment le gérer.
Si au contraire vous avez défini le type de collection en SQL, c'est à dire
Ensuite, vous pouvez faire quelque chose comme
en fonction de la version Oracle-- la syntaxe d'utilisation de collections dans SQL a évolué au fil du temps-les anciennes versions de Oracle avait plus d'une syntaxe complexe.
Vous pouvez convertir un PL/SQL tableau associatif (votre VARCHAR_ARRAY_TYPE) à un SQL de la table imbriquée collection en PL/SQL, mais qui nécessite une itération dans le tableau associatif et le remplissage de la table imbriquée, ce qui est un peu de douleur. En supposant que le
VARCHAR_TBL
table imbriquée de la collection a déjà été créévous pouvez convertir le tableau associatif à la table imbriquée et utiliser une table imbriquée dans une instruction SQL comme ceci (à l'aide de la SCOTT.Table EMP)
En raison de la conversion entre les types de collection est un peu de douleur, cependant, vous seriez généralement préférable d'utiliser simplement la table imbriquée collection (et en passant, que pour la procédure stockée) sauf s'il y a une raison particulière pour que le tableau associatif est nécessaire.
nous avons Oracle 11g
aussi, veuillez expliquer ce que vous entendez par "si votre type de collection est définie en PL/SQL (plutôt que SQL), vous ne pouvez pas l'utiliser dans SQL". Tout ce que nous faisons est à l'intérieur de procédures stockées. Veuillez garder cela à l'esprit, merci.
Posté un exemple de conversion entre les types de collection. Vous pouvez utiliser les types de collection défini dans SQL (c'est à dire CRÉER TYPE) en SQL et PL/SQL depuis PL/SQL est construit sur le haut de SQL. Vous pouvez utiliser uniquement les types de collection défini dans PL/SQL PL/SQL-- vous ne pouvez pas utiliser ces types de données dans SQL.
merci pour votre code. Mais toujours pas l'aider. Comment puis-je créer une table temporaire à l'INTÉRIEUR de ma procédure stockée(ou plutôt de DÉFINIR la table temporaire type)? Est-ce possible? Ou dois-je le faire par le biais de l'invite SQL. merci encore. Je ne peux pas juste de créer facilement de la table temporaire dans ma procédure stockée???
OriginalL'auteur Justin Cave