oracle获得了数字varray的最大价值

时间:2017-09-20 13:27:39

标签: oracle

是否有一个能够获得varray最大值的函数.. 实际上我一直这样做..

  DECLARE
        l_max NUMBER;

        type type_value is varray(5) of number;
        arr_value type_value := type_value (0,0,0,0,0);

    BEGIN
        SELECT MAX(field) INTO arr_value (1) FROM table1;
        SELECT MAX(field) INTO arr_value (2) FROM table2;
        arr_value(3) := 63; --fixed values
        SELECT MAX(field) INTO arr_value (4) FROM table3;
        arr_value (5) := 53;  --fixed values

        l_max:= arr_value(1);

        for i in 1..arr_value .count
        loop
            if l_max< arr_value (i) 
            then
                l_max := arr_value (i);
            end if;
        end loop;

       DBMS_OUTPUT.PUT_LINE(l_max);

有什么像GREATEST(varray)吗?

由于

2 个答案:

答案 0 :(得分:1)

使用本地声明的 varray类型,您无法做到这一点。

但是,如果声明了varray类型:

    数据库中的
  • create type)或
  • 在包规范中

然后你可以使用select语句:

declare
  arr_value type_value := type_value (0,43,1,7,3);
  -- Alternatively:
  --   arr_value type_value := my_package.type_value (0,43,1,7,3);
begin
  select max(column_value)
    into l_max
    from table(arr_value);
  dbms_output.put_line('max is '||l_max);
end;

答案 1 :(得分:0)

您的方法非常有效,没有内置函数可以在VARRAY内返回最大值,即使有一个,也可能会运行完全相同的代码;)