PL/SQL Utiliser une Variable de Table dans la Clause where
J'ai une table variable est passée dans une procédure. Je voudrais utiliser les valeurs dans une clause where comme ci-dessous, comment dois-je faire. La première ligne ci-dessous est déclarée dans le fichier de définition de package. La procédure ci-dessous est dans le corps de package.
type CatalogNos is table of VARCHAR2(100);
PROCEDURE GET_PART_CHARACTERISTICS (v_catalog_nos_ IN CatalogNos,
Parts_Char_Cursor out sys_refcursor) AS
BEGIN
OPEN Parts_Char_Cursor FOR
SELECT * FROM IFSAPP.SALES_PART_CHARACTERISTIC
WHERE CATALOG_NO IN (select values from v_catalog_nos_);
END GET_PART_CHARACTERISTICS;
Vous devez vous connecter pour publier un commentaire.
Est
CatalogNos
un type SQL (c'est à dire pas déclaré dans un package spec)? Si oui:Donc
CatalogNos
n'est pas un type SQL c'est un PL/SQL de type déclaré dans un paquet de spécification ou de corps. Le message d'erreur est assez clair: on ne peut pas utiliser les types PL/SQL dans SQL. C'est juste la façon dont il est.La solution la plus simple est d'utiliser un type SQL.
Si vraiment vous ne voulez pas créer votre propre type (pourquoi pas?) vous pouvez utiliser l'une de l'Oracle built-ins. Comme ceci:
La définition de type doit être un objet de base de données, ne fait pas partie d'un package, en vue d'être utilisé en SQL. Une fois que cela est vrai, vous pouvez utiliser le
table
fonction pour faire référence à une variable de ce type dans lefrom
clause.Basé sur le commentaire, il semble que j'ai besoin de ré-itérer: pour référence défini par l'utilisateur, le type de données dans SQL, vous devez définir le type comme un objet distinct à l'extérieur de l'emballage.
Pour une table défini par l'utilisateur qui contient un unique sans nom de domaine, vous pouvez utiliser
select *
ouselect column_value
.L'utilisation | la| pour concaténer votre requête avec une variable
quelque chose comme:
&
est uniquement utilisé en SQL*Plus sur le côté client à définir (interactif) des paramètres. Cela ne fonctionne pas lors de l'exécution à l'intérieur d'une procédure stockée.table
fonction. Cette solution proposée ne fonctionne pas. En outre, même si cela pourrait fonctionner, la concaténation de la valeur d'une variable dans une instruction DML est une très mauvaise pratique.