Является ли CatalogNos
типом SQL (т. Е. Не объявлено в спецификации пакета)? Если так:
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 * from table(v_catalog_nos_));
END GET_PART_CHARACTERISTICS;
"Этот SQL выдает ошибку: PLS-00642: локальные типы коллекций не
разрешено в операторах SQL "
То есть CatalogNos
- это не тип SQL, т. Е. Это тип PL / SQL, объявленный в спецификации или теле пакета. Сообщение об ошибке совершенно ясно: мы не можем использовать типы PL / SQL в инструкциях SQL. Так оно и есть.
Самое простое решение - использовать тип SQL.
SQL> create or replace type CatalogNos is table of VARCHAR2(100);
2 /
Type created.
SQL>
Если вы действительно не хотите создавать свой собственный тип (почему бы и нет?), Вы можете использовать одну из встроенных функций Oracle. Как это:
create or replace PROCEDURE GET_PART_CHARACTERISTICS
(v_catalog_nos_ IN sys.dbms_debug_vc2coll,
Parts_Char_Cursor out sys_refcursor)
AS
BEGIN
OPEN Parts_Char_Cursor FOR
SELECT * FROM IFSAPP.SALES_PART_CHARACTERISTIC
WHERE CATALOG_NO IN (select * from table(v_catalog_nos_));
END GET_PART_CHARACTERISTICS;
/