Oracle批量收集成三列
Posted
技术标签:
【中文标题】Oracle批量收集成三列【英文标题】:Oracle bulk collect into three column 【发布时间】:2021-03-16 07:35:14 【问题描述】:如何在下面的函数中添加多个例如。 l_col2
和 l_col3
l_col2 = Select sal as val2 from emp where empno = P_ID
l_col3 = Select deptno as val3 from emp where empno = P_ID
create or replace function F_MY_FUNC
(
P_ID IN number
)
return sys.odcinumberlist
as
l_coll sys.odcinumberlist;
begin
select * bulk collect into l_coll
from (
Select ename as val from emp where empno = P_ID
union all
Select ename as val from myemp where empno = P_ID
);
return l_coll;
end;
【问题讨论】:
您正在尝试将字符串返回到数字数组中。 @BarbarosÖzhan 我需要一个带参数的函数,ibb.co/ygjhGZ6 在函数中需要放在 Littlefoot 的 sql 代码下面 【参考方案1】:你可以,但不能进入SYS.ODCINUMBERLIST
- 创建你自己的类型。
SQL> create or replace type t_row as object
2 (empno number, ename varchar2(10), job varchar2(10));
3 /
Type created.
SQL> create or replace type t_tab as
2 table of t_row;
3 /
Type created.
SQL> declare
2 l_tab t_tab;
3 begin
4 select t_row(empno, ename, job) --> 3 columns
5 bulk collect into l_tab --> into one collection
6 from emp
7 where deptno = 20;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL>
【讨论】:
是否可以将(SQL> 声明 2 l_tab t_tab....)放入带有一个参数的函数中,并将参数 20 替换为我的参数?然后从 my_func(parameter) 调用 Select * 并使用 3 列获取结果选择? 恐怕我听不懂你在说什么。 什么是my_function
,你想用20
做什么?顺便说一句,您不需要创建对象类型,一个普通的 PL/SQL 记录集合就可以了。
@Littlefoot 这样的东西 ibb.co/ygjhGZ6
有时我们可能不需要在模式级别声明类型并利用 DBMS_SQL pkg 中现有的记录和表类型。 Oracle 12.2 doc以上是关于Oracle批量收集成三列的主要内容,如果未能解决你的问题,请参考以下文章