[英]Is there a way to loop through selected columns in plsql
我有一个包含 col_test1、col_test2、col_test3... 列的表 TestTable,我想创建一个循环来单独访问这些列中的每一个,并找到最大值并将其放在声明块中创建的变量中,并且只是 dbms。输出。
Declare
my_array sys.dbms_debug_vc2coll := sys.dbms_debug_vc2coll('col_test1','col_test2','col_test2');
v_test number(8,0);
Begin
for r in my_array.first..my_array.last
loop
select max(my_array(r)) into v_test from TestTable;
dbms_output.put_line(v_test);
end loop;
End;
/
我得到的 output 只是字符串“col_test1”,应该是 50。这是通过 oracle SQL 完成的。 有什么办法可以做到这一点?
您可以为此使用动态 SQL
Declare
my_array sys.dbms_debug_vc2coll := sys.dbms_debug_vc2coll('col_test1','col_test2','col_test2');
v_test number(8,0);
Begin
for r in my_array.first..my_array.last
loop
execute immediate 'select max(' || my_array(r) || ') from TestTable'
into v_test;
dbms_output.put_line(v_test);
end loop;
End;
但是,如果您要使用动态 SQL,通常更有意义的是构建单个 SQL 语句,该语句一次获取所有三列的max
,而不是可能在同一个表上执行三个单独的表扫描。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.