是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;
"This SQL gives an error: PLS-00642: local collection types not allowed in SQL statements"
所以CatalogNos
不是SQL類型,即它是在一個封裝規格或機構宣稱PL/SQL類型。錯誤消息非常明確:我們不能在SQL語句中使用PL/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;
/
來源
2011-12-28 20:32:33
APC
此SQL提供了一個錯誤:PLS-00642:SQL語句中不允許使用本地集合類型 – Adam 2011-12-28 21:41:35