PL/SQL 遍历某一行数据的每一列

时间:2021-09-09 15:04:53
首先我已经找了好久这个问题的答案了,知道有一种方法可以实现

select b.* from (select rownum as num,b.* from table1 as b) where num = 1

这个就是可以根据列名组成动态sql查询出某一行的某一列的值

但是,但是,这样的话数据量大了会很慢很慢,想象一下,10列 * 3000行 就是3W个值,我得每次查询某行某列的值都必须select一回,大大浪费了时间

现在的情况是,我已经有了列名的集合,可以循环得到每列的列名,但是注意,列名是保存在变量中的,
如果通过游标去控制数据查询,游标每指向一行,该行的数据只能通过A.col_name这种方式获取,col_name是已知的列名,关键是我这里列名是存储在变量中的! 

有没有一种思路,可以查询10*3000这种矩阵数据时,速度快些,循环的话,一行一行来,每到一行再遍历每一列,注意注意,该数据集有多少列每列都叫什么名字是动态的。

6 个解决方案

#1


这种处理方式值得商榷啊,就相当于匿名遍历,很难解决。这是在哪里遍历?

#2


很赞成楼主的想法,这种循环就是慢,还不如用游标呢

#3


那如果使用数据字典呢??

#4


列名固定,无论有多少:

for c in (select ...) loop
  c.列1......;
  c.列2......;
  c.列3......;
  ......
  c.列n......;

end loop;

列名可变

用 dbms_sql 包。

#5


引用 4 楼 forgetsam 的回复:
列名固定,无论有多少:

for c in (select ...) loop
  c.列1......;
  c.列2......;
  c.列3......;
  ......
  c.列n......;

end loop;

列名可变

用 dbms_sql 包。

谢谢回复,实际的数据库只是和oracle比较像,并不是oracle

#6


引用 2 楼 zhaoxiangchong 的回复:
很赞成楼主的想法,这种循环就是慢,还不如用游标呢


最后速度实在受不了,还是改成系统函数啦~

#1


这种处理方式值得商榷啊,就相当于匿名遍历,很难解决。这是在哪里遍历?

#2


很赞成楼主的想法,这种循环就是慢,还不如用游标呢

#3


那如果使用数据字典呢??

#4


列名固定,无论有多少:

for c in (select ...) loop
  c.列1......;
  c.列2......;
  c.列3......;
  ......
  c.列n......;

end loop;

列名可变

用 dbms_sql 包。

#5


引用 4 楼 forgetsam 的回复:
列名固定,无论有多少:

for c in (select ...) loop
  c.列1......;
  c.列2......;
  c.列3......;
  ......
  c.列n......;

end loop;

列名可变

用 dbms_sql 包。

谢谢回复,实际的数据库只是和oracle比较像,并不是oracle

#6


引用 2 楼 zhaoxiangchong 的回复:
很赞成楼主的想法,这种循环就是慢,还不如用游标呢


最后速度实在受不了,还是改成系统函数啦~