我是ORACLE編程中的新手,我試圖將表列值與傳入的數組進行比較,並且我在此過程中遇到了相當令人沮喪的時間。Oracle - PLS-00642:SQL語句中不允許使用本地集合類型
這是來自包頭的類型聲明。
TYPE T_STRING_ARRAY IS TABLE OF VARCHAR2(5);
這裏是使用它的函數。
create or replace PACKAGE BODY TEST_PACK IS
FUNCTION TEST_LOG_FN
(
PI_START_DATE IN VARCHAR2,
PI_END_DATE IN VARCHAR2,
PI_LOG_TYPE IN T_STRING_ARRAY
)
RETURN T_REF_CURSOR
AS
PO_RESULT T_REF_CURSOR;
BEGIN
OPEN PO_RESULT FOR
SELECT
EL.ENTRY_BASE_LOG_ID,
EL.APP_NAME,
EL.APP_MODULE,
EL.CREATION_DATE,
EL.APP_STATUS,
EL.LOG_TYPE
FROM
LG_ENTRY_BASE_LOG EL
WHERE
CREATION_DATE > PI_START_DATE AND
CREATION_DATE < PI_END_DATE AND
(EL.LOG_TYPE IN PI_LOG_TYPE OR PI_LOG_TYPE = NULL);
RETURN
PO_RESULT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END TEST_LOG_FN;
END;
我得到的錯誤是PLS-00642:SQL語句中不允許使用本地集合類型。我已在線閱讀
「爲避免PLS-00642,需要在模式級定義集合;因此,您需要將varray表定義爲實際表,使用Oracle DDL和CREATE TYPE語法「。
http://www.dba-oracle.com/t_pls_00642_local_collection_types_not_allowed_in_sql_statement.htm
我不知道怎麼做,也沒有我在網上找到,我可以用任何引用。有人可以幫助我嗎?如果有人知道更簡單的方法來查看數組中是否存在字符串,那麼這也是一個完全可以接受的答案。
謝謝你的快速回復。我現在得到新的錯誤: PL/SQL:ORA-22905:無法訪問非嵌套表項中的行。從「table」一詞開始 – jmick2010
您使用的是哪個Oracle版本? –
版本是12C – jmick2010