免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9859 | 回复: 3

[数据库] 在plsql中如何将一个数组使用到sql中的查询条件中 [复制链接]

论坛徽章:
0
发表于 2013-10-22 11:28 |显示全部楼层
本帖最后由 peso 于 2013-10-25 15:14 编辑


declare
  type str_aa  is table of varchar2(30) ;
  str_var  str_aa ;
  vn_cnt  number(4) ;
begin
   select  object_name  bulk collect into  str_var  from all_objects where rownum < 10  ;

   select count(*)  into vn_cnt from  all_tables where table_name in (str_var) ;
   dbms_output.put_line('cnt:='||vn_cnt ) ;
  
end ;
看了楼下的同学回答,非常感谢!我可能没有说清楚。
我是想将一个数组或集合转换成一个子查询。由于实际过程比较复杂,用到了集合,并不能简单的转换成select * from tablename where a in (子查询) ,因为该数组我还要编辑。

结果将集合转换成子查询时,如上述块中,总是报pls-00425错误,请问,如果我想将一个一维集合转换成一个子查询,该如何写?

论坛徽章:
2
酉鸡
日期:2014-02-19 09:11:08摩羯座
日期:2014-05-23 10:16:16
发表于 2013-10-22 13:50 |显示全部楼层
本帖最后由 tiankafeiwu 于 2013-10-22 13:51 编辑

select  object_name  bulk collect into  str_var,首先你这边select的三个字段,中间也没逗号,这语法有问题,
在有你如果想把查询到的结果放在下一个查询的where条件里面,为什么还要用select  xxx into xx这样的写法,你完全可以直接where table_name in(select a from d)这样子来弄

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
发表于 2013-10-22 14:06 |显示全部楼层
其实简单一点,可以通过以下脚本实现:
  1. declare
  2.     vn_cnt number(4) ;
  3. begin  
  4.     select count(*) into vn_cnt
  5.     from  all_tables
  6.     where table_name in (select object_name from all_objects where rownum <10);
  7.     dbms_output.put_line('cnt:='||vn_cnt ) ;
  8. end ;
  9. /
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
发表于 2013-11-08 17:25 |显示全部楼层
本帖最后由 li0924 于 2013-11-08 17:26 编辑

为什么一定要用数组跟集合呢?数组在oracle 是一块鸡肋!别看oracle数组是关联数组;这个应该可以达到你的要求吧
  1. declare
  2. v_sum number(4) :=0;
  3. begin
  4. for ob_name in (select object_name from all_objects where rownum < 10) loop
  5.   for con in (select count(*) num from  all_tables where table_name = ob_name.object_name) loop
  6.   v_sum:=con.num+v_sum;
  7.   end loop;
  8. end loop;
  9. dbms_output.put_line(v_sum);
  10. end;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP