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 包。
for c in (select ...) loop
c.列1......;
c.列2......;
c.列3......;
......
c.列n......;
end loop;
列名可变
用 dbms_sql 包。
#5
谢谢回复,实际的数据库只是和oracle比较像,并不是oracle
#6
最后速度实在受不了,还是改成系统函数啦~
#1
这种处理方式值得商榷啊,就相当于匿名遍历,很难解决。这是在哪里遍历?
#2
很赞成楼主的想法,这种循环就是慢,还不如用游标呢
#3
那如果使用数据字典呢??
#4
列名固定,无论有多少:
for c in (select ...) loop
c.列1......;
c.列2......;
c.列3......;
......
c.列n......;
end loop;
列名可变
用 dbms_sql 包。
for c in (select ...) loop
c.列1......;
c.列2......;
c.列3......;
......
c.列n......;
end loop;
列名可变
用 dbms_sql 包。
#5
谢谢回复,实际的数据库只是和oracle比较像,并不是oracle
#6
最后速度实在受不了,还是改成系统函数啦~