我是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语法“。
我不知道怎么做,也没有我在网上找到,我可以用任何引用。有人可以帮助我吗?如果有人知道更简单的方法来查看数组中是否存在字符串,那么这也是一个完全可以接受的答案。