oracle table 函数

       今天要把'1,2,3,4' 这样的字符串变成 selelct .... in (1,2,3,4) 这样的条件, 一开始想到用数组, 发现不能直接 select .... in (数组), 但是通过google 后, 知道了oracle 有一个 table 函数, 这个函数可以把 table 类型的数据展现出来.

       table 函数本人刚刚接触, 用得不多, 感觉select * from table(my_table_type)  类似于 select * from (select a,b,c from my_table) 一样, 不同的地方是my_table_type 的数据是可以自己编辑的, 不用从具体哪个表中获取, 效率方面本人没有测试过.


       在plsql 块中定义的 table 类型变量, 无法直接用 table 函数, 会报 ora-00642错误:local collection types not allowed in SQL statements.

例子:

1. 建立一个table 类型(除了这种嵌套表类型还有集合类型是 varray 和 record, 但是只有table 类型可以用于 table函数, 这三种集合都有很多内建函数).

create type emp_array is table of varchar2(200);  --建立在当前用户下面的

2. 在plsql 块, 存储过程或方法中定义一个 emp_array 变量, 在执行代码中给其赋值(赋值方式需根据自己的实际情况来)

定义:  v_emp_array emp_array;

赋值: v_emp_array:=emp_array('219462979','219462979','C','D','E','F','G');
       DBMS_OUTPUT.put_line('Length:'||v_emp_array.count);

3. 用于in 中

select * from emp p where to_char(p.id) in (select * from table(v_emp_array));


参考了lne818 的oracle table() 函数用法, 发现有 the() 函数 可以用于collection类型如: table 和 varray (测试table 和 varray可行, 没测试record), 不过要借助dual 表.

如 select * from the(select v_emp_array from dual);


参考了这个:

http://www.club-oracle.com/articles/varray-in-pl-sql-507/

lne818 的文章: oracle table()函数用法



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值