函数是-
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语句中使用集合结果,必须在模式级别将其声明为类型。
以下代码示例:
- 创建集合类型f1f2_array -保留f1和f2函数的结果
- 创建函数f1, f2和f1f2,它调用f1和f2并返回集合f1f2_array result
-
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; /