Пользовательские типы таблиц PLSQL и объединения

Допустим, у меня есть пользовательский тип таблицы:

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

У меня есть процедура с параметром такого типа:

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

Могу ли я использовать srcCodesIn в операторе select/join с другой таблицей внутри процедуры? Пытался заставить его работать, и компилятор продолжает сообщать:

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

Я уверен, что это что-то простое с синтаксисом, я просто не смог понять это. Я получил кое-что для работы с циклом for, но мне интересно, есть ли другой способ сделать это. Спасибо.


person MonkeyWrench    schedule 28.10.2011    source источник


Ответы (1)


Как насчет

SELECT DISTINCT someVal 
INTO outVal 
FROM OtherTable ot, TABLE(srcCodesIn) sc 
WHERE ot.ID = sc.column_value
person phil    schedule 28.10.2011
comment
Да, это сработает. Я попробовал ваш оригинальный (до редактирования) ответ, и это выдало туманное сообщение об ошибке. Интересно, что мне нужно преобразовать тип таблицы UDT в таблицу, прежде чем использовать ее в качестве... таблицы. Дал вам ответ, так как у другого парня уже есть миллиард очков. 8) - person MonkeyWrench; 28.10.2011
comment
Да, я попробовал это, смоделировав его в своем локальном оракуле, поэтому мне пришлось привести его к типу, прежде чем преобразовать в таблицу, а потом забыть удалить :) Спасибо за очки :) - person phil; 28.10.2011
comment
Компьютеры — это все о точных определениях. Таблица UDT — это ТИП, а не ТИП, если речь идет о словаре данных. Вот почему вам нужно привести его, чтобы использовать его в операторе SQL. - person APC; 30.10.2011
comment
какую версию оракула вы используете? - person Zeus; 04.06.2016