【发布时间】:2015-09-13 18:37:45
【问题描述】:
我需要你的帮助.....如何将多个值传递给函数中的单个参数?
值“AAA 1”、“BBB 2”、“CCC 3”“DDD 4”将被传递给相同的参数“v_type”,这些值将根据从下拉菜单中的选择发送前端屏幕。用户可以从列表中选择一个或多个值,这些值应传递给过程,然后将传递给过程中 SELECT 语句的 WHERE 子句。
我的功能是这样的:
例子
CREATE OR REPLACE FUNCTION FN_GET_ROWS
(v_date_ini IN DATE,
v_date_end IN DATE,
v_type IN VARCHAR2
)
RETURN TEST_TABTYPE
AS
V_Test_Tabtype Test_TabType;
BEGIN
SELECT TEST_OBJ_TYPE(DATE, NAME, ALERT)
BULK COLLECT INTO V_Test_TabType
FROM (select date, name, alert
from Table
where DATE BETWEEN v_date_ini AND v_date_end
AND Alert in (select REGEXP_SUBSTR (v_type, '[^,]+', 1, level)
from dual
connect by level <= length(regexp_replace(v_type,'[^,]*'))+1)
);
RETURN V_Test_TabType;
END;
搜索互联网我发现 Varray 可能有效,但我不知道如何将其分配给变量 :type 以及用户在屏幕上选择的参数。
我在数据库上创建了这种类型,我该如何使用它?我是 plsql 的新手。
CREATE TYPE alert_obj AS OBJECT (type_alert VARCHAR2(60));
CREATE TYPE alert_varray_typ AS VARRAY(100) OF alert_obj;
感谢您的帮助
伊曼纽尔。
【问题讨论】:
-
值将从哪里传递——前端是什么?你用什么语言调用 Oracle 函数? (而且你也返回了一个集合?也许你想要一个 ref 游标返回?)
-
你好 Alex,前端是 BI 发布者 11,数据集的查询是:SELECT * FROM TABLE(FN_GET_ROWS ( :date_ini, :date_end, :type));问题是当 BI Publisher 传递参数 :type 时,它似乎将每个逗号解释为一个单独的参数,所以我得到一个无效数量的参数错误。如果选择一个值不出错,然后选择两个值出错:ORA-06553: PLS-306: wrong number or types of arguments in call to 'FN_GET_ROWS'
标签: function plsql oracle11g varray