2016-09-24 27 views
0

職能是─如何將兩個函數與通用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.但是seperately寫的。我希望合併它們並獲得兩個值,應該如何調用它們才能獲得所需的值,而不是兩者。

+1

非常不清楚。你在哪裏使用函數1中的任何IN參數?你在哪裏使用函數2中的IN參數?你在什麼意思「哪裏w1」? - 看起來像一個不完整的情況。 – mathguy

回答

0

要返回2個值,函數應該返回數字collection而不是一個數字(返回值有很多選項:它可以通過串聯字符串,遊標或臨時表,它取決於代碼要求)。

要在其他sql或pl/sql語句中使用收集結果,必須在架構級別聲明爲類型。

在示例的下面的代碼:

  1. 創建集合類型f1f2_array - 保持結果從兩個F1F2功能
  2. 創建函數F1F2f1f2 - 它調用f1個F2並返回集合f1f2_array結果
  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; 
    /
    
+0

這看起來不錯!謝謝!! – CodERORR

相關問題