我如何合并两个函数与共同的IN OUT参数,并从它得到两个返回值



函数是-

Function 1(a in varchar, b in number, c in varchar)
return number as
aaa varchar;
bbb number;
begin
select name into aaa from tb1 where w1;
return aaa;
exception
eee
end;
function 2 (b in number)
return number as
bbb number;
begin
select address into bbb from tb2 where w2;
return bbb;
exception
eee
end;

所以基本上函数2是函数1的一个子集。但是分开写。我希望合并它们并获得两个值,以及如何调用它们以仅获得所需的值,而不是两者。

要返回2个值,函数应该返回一组数字而不是一个数字(返回值有多种选择:可以是串接字符串、游标或临时表,取决于代码要求)。

要在其他sql或pl/sql语句中使用集合结果,必须在模式级别将其声明为类型。

以下代码示例:

  1. 创建集合类型f1f2_array -保留f1f2函数的结果
  2. 创建函数f1f2f1f2,它调用f1f2并返回集合f1f2_array result
  3. pl/sql检查块-调用f1f2并打印结果

    CREATE OR REPLACE type f1f2_array AS TABLE OF NUMBER
    /
    CREATE OR REPLACE FUNCTION f1 RETURN NUMBER AS
    BEGIN
      RETURN 1;
    END;
    /
    CREATE OR REPLACE FUNCTION f2 RETURN NUMBER AS
    BEGIN
      RETURN 2;
    END;
    /
    CREATE OR REPLACE FUNCTION f1f2 RETURN f1f2_array AS
      v_res f1f2_array := f1f2_array();
    BEGIN
      v_res.extend(2);
      v_res(1) := f1;
      v_res(2) := f2;
      RETURN v_res;
    END;
    /
    /* check */
    set SERVEROUTPUT ON;
    DECLARE
      v_array f1f2_array;
    BEGIN
      DBMS_OUTPUT.PUT_LINE('result from f1 and f2:');
      v_array := f1f2;
      FOR i IN 1..v_array.count
      LOOP
        DBMS_OUTPUT.PUT_LINE('f'||i||'='||v_array(i));
      END LOOP;
    END;
    /
    

最新更新