2011-10-28 6 views
0

Disons que j'ai un type de table défini par l'utilisateur:types de table définis par l'utilisateur PLSQL et rejoint

create or replace type SrcCodeTbl is table of varchar(20); 

J'ai une procédure qui a un paramètre de ce type:

create or replace procedure Blah.MyProc(srcCodesIN in SrcCodeTbl) 

Puis-je utiliser srcCodesIn dans une instruction select/join avec une autre table dans la procédure? Essayé de le faire fonctionner, et le compilateur ne cesse de rapports:

select distinct someVal into outVal 
from OtherTable ot, srcCodesIn sc 
where ot.ID = sc.column_val; 

Error(28,22): PL/SQL: ORA-00942: table or view does not exist 

Je suis sûr que sa quelque chose de simple avec la syntaxe, j'ai tout simplement pas été en mesure de comprendre. J'ai obtenu quelque chose pour travailler avec une boucle for, mais je suis intéressé s'il y a une autre façon de le faire. Merci.

Répondre

2

Que diriez-vous

SELECT DISTINCT someVal 
INTO outVal 
FROM OtherTable ot, TABLE(srcCodesIn) sc 
WHERE ot.ID = sc.column_value 
+0

Eh oui, ça va fonctionner. J'ai essayé votre réponse originale (avant modification), et cela crache un message d'erreur nébuleuse. Intéressant que j'ai besoin de cast un type de table UDT à une table avant de l'utiliser comme une ... table. Je vous ai donné la réponse, car l'autre gars a déjà des points bazillion. 8) – MonkeyWrench

+0

Ouais, je l'ai essayé en le simulant dans mon oracle local donc je devais le cataloguer avant de le convertir en table et ensuite j'ai oublié de l'enlever après :) Merci pour les points :) – phil

+0

Les ordinateurs sont tous sur des définitions précises. Une "table" UDT est un TYPE pas un TYPE en ce qui concerne le dictionnaire de données. C'est pourquoi vous devez le convertir pour l'utiliser dans une requête SQL. – APC

Questions connexes