繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM