有没有办法循环遍历plsql中的选定列

时间:2020-12-28 13:13:57

标签: sql oracle loops plsql

我有一个包含 col_test1、col_test2、col_test3 列的 TestTable 表... 我想创建一个循环来分别访问这些列中的每一个,并找到最大值并将其放入声明块中创建的变量中,然后简单地使用 dbms.out.put。

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;
/

我得到的输出只是字符串“col_test1”,它应该是 50。 这是通过oracle SQL 完成的。有什么办法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您可以为此使用动态 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,而不是潜在地创建三个单独的表在同一张桌子上扫描。