2016-10-21 73 views
0

我寫的SQL函數,該函數返回的選擇三個字段的結果,我應該如何返回三個檢測值?SQL函數返回衆多領域

CREATE OR REPLACE FUNCTION ATK_SMSPHONE(POLICY IN VARCHAR2, INSUREDNUMBER IN NUMBER) 
RETURN VARCHAR2 
IS 
VPHONE VARCHAR2(100); 
FIRSTNAME VARCHAR2(30); 
LASTNAME VARCHAR2(30); 
BEGIN 
SELECT ADRESSE_ADHERANT, PRENOM_ADHERANT, NOM_ADHERANT INTO VPHONE, FIRSTNAME, LASTNAME 
FROM ADHERANT WHERE POLICE = POLICY 
AND NUMERO_ADHERANT = INSUREDNUMBER 
AND ROLE_MEMBRE = 0; 
RETURN VPHONE,FIRSTNAME,LASTNAME; 
EXCEPTION WHEN OTHERS THEN 
RETURN ''; 
END; 
/

我已經嘗試了許多選擇,但徒勞的,抱歉,但我忘了如何使用SQL:/

+2

這是SQL Server或Oracle?另外,如何調用這個函數?它的目的是什麼?如果你路過的select語句返回到調用過程返回的數據集,那麼可能你正在尋找需要返回一個參考遊標。 – Boneist

+0

它是Oracle,它應該由其他請求被調用,它應該給三個字段,但在回報問題,如何返回三個值不是一個 – chou

+1

「其他要求」 - 你是什麼意思呢?它是另一個PL/SQL過程嗎?一條SQL語句? .NET程序?還有別的嗎?請編輯您的問題,以提供更多關於如何使用此功能的結果的信息。 – Boneist

回答

1

這可能是一個辦法:

create or replace type threeValues as object (VPHONE VARCHAR2(100), 
               FIRSTNAME VARCHAR2(30), 
               LASTNAME VARCHAR2(30) 
              ) 
/
CREATE OR REPLACE FUNCTION ATK_SMSPHONE(POLICY IN VARCHAR2, INSUREDNUMBER IN NUMBER) 
    RETURN threeValues IS 
    retVal         threeValues; 
BEGIN 
    SELECT threeValues(
         '99', 
         'aa', 
         'bb' 
        ) 
     INTO retVal 
     FROM DUAL; 
    return retVal; 
EXCEPTION 
    WHEN OTHERS 
    THEN 
     RETURN null; 
END; 
/

召喚:

SQL> select ATK_SMSPHONE('', '').VPHONE from dual; 

ATK_SMSPHONE('','').VPHONE 
----------------------------------------------------------------------------- 
99 

SQL> select ATK_SMSPHONE('', '') from dual; 

ATK_SMSPHONE('','')(VPHONE, FIRSTNAME, LASTNAME) 
----------------------------------------------------------------------------- 
THREEVALUES('99', 'aa', 'bb') 
+0

THX ^^這是我所需要的:d – chou