各位大哥:
    在ORACLE中怎么实现像DECODE函数那样的参数,即参数的个数是可变的。
    别:有什么方法写一个类似于这样的函数: fun_min(数值1,数值2,数值3.....),返回它的最小值

解决方案 »

  1.   

    参数个数不固定,有点麻烦,写个自定义函数
    select min(1) from(
    select 1 from  dual
    union
    select 2 from dual
    union
    select 3 from dual
    )
      

  2.   

    create type MyObj as object(x number);
    create type MyTable as table of MyObj;declare
      vRec MyTable := MyTable();
      vMin number(10);
    begin
      for i in 1..10 loop
        vRec.extend;
        vRec(vRec.Last) := MyObj(i);
      end loop;
      select max(x) into vMin from table(vRec);
      dbms_output.put_line(vMin);
    end;我有这样实现过,但是写成函数就有点问题,想过传数组给函数,但是那样的话调用起来又比较麻烦,所以我想看能不能实现成DECODE函数的参数一样!
      

  3.   

    oracle如何实现参数可变的存储过程,我是不知道,如果哪位大虾知道请共享一下,但是如果要实现
    fun_min(数值1,数值2,数值3.....),返回它的最小值
    oracle有现成函数可以支持,你可以试试least,select least(1,2,3) from dual。还有取最大值greatest
      

  4.   


    对啊 oracle本身有提供方法的,least() greatest()为什么要自己写。
      

  5.   

    应该DECODE函数的参数会有个数限制的,不可能输入无限个参数,这样对性能也不好.
      

  6.   

    这个主题不错的,我之前也研究过,不过发现oracle没有好的方式(比如不支持类似c++的 ...语法),它只能通过package的重载来实现。看看猩猩们有没有高招。