我有一些数字,例如(1,2,3,7,8),它们需要存储在一个对象中(比如说,l_list),并且在调用选择查询时,这个l_list将被用作函数中的参数值。
全局存储数据:
l_list := (1,2,3,7,8);
创建函数:
create or replace function f_get_result (p_list number)
return varchar2
as
l_result varchar2(100);
Begin
select l_code
into l_result
from table_1;
return l_result;
end f_get_result;
调用选择查询中的函数:
select f_get_result(l_list) from dual;
到目前为止,我已经尝试将参数的数据类型定义为类型table和varray。但是,它没有工作。以下是我使用的代码:
第一个
期望值:从对偶中选择fn_id_exp(l_list);,需要用到这么多,num_array不应该在那里,
其中,l_list是存储特定数字(如(100,200,300))的对象。
请帮帮我,我在这方面有点新手。有人能给予我一个适当的例子吗?
注意:这些数字存储在什么位置和什么数据类型并不重要。要求只是调用以下代码中的所有数字(1,2,3,7,8):
select fn_id_exp(l_list) from dual;
2条答案
按热度按时间xvw2m8pv1#
另一个选项是使用Oracle的内置类型,它不要求您使用自己的类型。
这里有一个例子函数返回在作为集合传递的部门中工作的雇员。
测试:
请注意,这样的结果可能比返回一个“模拟”表中的行的字符串(其值由 * 换行符 * 字符分隔)更方便,因为如果要进一步处理结果,您可能仍然需要将它们拆分为行。
你说:
期望值:
select fn_id_exp(l_list) from dual;
,需要使用这么多,num_array
不应该在那里但是--为什么不呢?
num_array
(或者你要使用的任何类型名称)有什么问题吗?这是语法,如果你想得到结果,你应该遵循它。在我看来,愚蠢的要求。无论如何:您可以传递一个字符串,例如逗号分隔的数值,如本例中所示;你得把它们分成几行看看有没有帮助。
测试:
ghg1uchk2#
使用集合:
然后道:
然后道:
给定示例数据:
输出:
| 数组编号(100,200)|
| - -|
| 叶状茎大树枝|
然而
不使用函数而只使用查询可能会更简单:
或者,如果要使用数组::
或者,将数组作为绑定参数(通过JDBC等)传入,然后:
输出:
| 分支名称|
| - -|
| 叶状茎|
| 大树枝|
fiddle
更新
如果您需要静态数组,则可以创建一个包:
同身:
那么您可以在查询中使用它:
或
fiddle