函数如何使用 oracle 中的集合返回第二个和第四个值?答案是 42 和 46

Posted

技术标签:

【中文标题】函数如何使用 oracle 中的集合返回第二个和第四个值?答案是 42 和 46【英文标题】:how function return 2nd and 4th value using collection in oracle? answer would be 42 and 46 【发布时间】:2018-03-13 15:29:33 【问题描述】:

它将显示第 4 个收藏值。我想要第二和第四。

create or replace function temp_fun_2 return number as
    TYPE t1 IS table of number;
    emp_tab t1 ;
BEGIN
    emp_tab := t1(12, 42, 39, 46, 57, 62, 11, 35, 98);
    return emp_tab(4);
end;
/

【问题讨论】:

返回多个事物将需要使用 OUT 参数或返回具有多个成员的集合类型。 或将返回类型改为varchar2并返回emp_tab(2) || ',' || emp_tab(4) 返回一个逗号分隔的字符串,其中包含两个值。需要更多地了解您要实际实现的目标,才能知道哪种解决方案最适合您。 感谢您的回复。编译上述函数后。它使用“select (temp_fun_2) from dual;”返回输出“46”我想要输出 22 和 46。一个低于另一个。这意味着首先它将返回第二个集合值,然后返回第四个 【参考方案1】:

从你的评论来看:

我想要输出 22 和 46。一个在另一个之下

(顺便说一句,它是42 而不是22!)

我猜,您正在寻找Table functionsPipelined Table functions

所以,这应该可行:

CREATE TYPE t_row AS object   (
  id           NUMBER
);
/

CREATE TYPE t_tab IS TABLE OF t_row;
/


create or replace function temp_fun_2 return t_tab PIPELINED as
    TYPE t1 IS table of number;
    emp_tab t1 ;
BEGIN
    emp_tab := t1(12, 42, 39, 46, 57, 62, 11, 35, 98);
    PIPE ROW(t_row(emp_tab(2)));
    PIPE ROW(t_row(emp_tab(4)));
    return;
end;


select * from table(temp_fun_2)

结果:

42
46

【讨论】:

你能解释一下“select (temp_fun_2) from dual;”之间的区别吗?和“从表中选择*(temp_fun_2)”

以上是关于函数如何使用 oracle 中的集合返回第二个和第四个值?答案是 42 和 46的主要内容,如果未能解决你的问题,请参考以下文章

VC MFC下 定义 CString str 怎样获取str的第二个和第三字符(用啥函数)?

如何使用选择器获取第二个和第三个元素?

SQL Regex 在第二个和第三个正斜杠之间选择字符串

如何使用CHARINDEX和SUBSTRING在第二个和第三个“_”之间提取特定文本?

在第二个和第三个连字符之间提取 TextString

Swift:Spritekit 中的多个场景,从第二个和第一个场景的不同 Sprite 节点类型调用 touchesBegan