2016-05-20 39 views
1

我寫一個函數funGetAccount’ in甲骨文的PL-Sql`參數傳遞ProdCd但查詢有考慮其聲明它是如何解決的,我不明白我的REQ是相同的查詢,請不要」不改變查詢設計。問題的參數傳遞在Oracle PL-SQL函數

Function funGetAccount (ProdCd in Number) 
      Return Varchar2 Is 
      varResult  Varchar2(2000); 

      Begin 

      varResult := ' Select AC_NO, NAME From (' 
        || ' Select AC_NO, NAME' 
        || ' From Tab1 Where PRODUCT_CD = ProdCd)'; 


     varResult := varResult; 
     Return varResult; 
End funGetAccount; 
+0

你想返回'AC_NO'和'NAME'從查詢返回的? – Utsav

+0

現在是解決這個問題 –

回答

0
Function funGetAccount (ProdCd in Number) 
      Return Varchar2 Is 
      varResult  Varchar2(2000); 

      Begin 

      varResult := ' Select AC_NO, NAME From (' 
        || ' Select AC_NO, NAME' 
        || ' From Tab1 Where PRODUCT_CD = '''|| ProdCd ||''')'; 


     varResult := varResult; 
     Return varResult; 
End funGetAccount; 
1

這將返回AC_NONAME通過空間連接起來。你不能從它返回2個值。

另外,還要確保你的查詢是針對給定的prodcd否則只返回第一行只返回1行。

create or replace function funGetAccount (ProdCd in Number) 
      Return Varchar2 Is 
      varResult Varchar2(2000); 
      Begin 
    Select AC_NO||' '||NAME 
      into varResult 
      From Tab1 Where PRODUCT_CD = ProdCd and rownum <2; 
     Return varResult; 
End funGetAccount; 
0

我不明白你想用這個函數存檔什麼:return select語句或檢索數據。

在第一種情況下,你應該做的:

Function funGetAccount (ProdCd in Number) 
Return Varchar2 
Is 
    varResult  Varchar2(2000); 
Begin 
    varResult := ' Select AC_NO, NAME From (' 
        || ' Select AC_NO, NAME' 
        || ' From Tab1 ' 
        || ' Where PRODUCT_CD = ' || ProdCd || ')'; 

    Return varResult; 
End funGetAccount; 

在第二(檢索數據)

create or replace function funGetAccount (ProdCd in Number) 
Return Varchar2 
Is 
    varResult Varchar2(2000); 
Begin 
    Select AC_NO||' '||NAME 
    into varResult 
    From Tab1 
    Where PRODUCT_CD = ProdCd; 

    Return varResult; 

End funGetAccount; 
0

按照問題我可以看到有哪些可以進入圖片兩個要求。

1)OP想通過函數返回原始的SQL語句。

2)OP想在級聯WAY SQL輸出。

我都集中在2地步,我已經把一些像異常處理好編碼做法。希望能幫助到你。

FUNCTION funGetAccount(
    ProdCd IN NUMBER) 
    RETURN VARCHAR2 
IS 
    p_result_out VARCHAR2(100); 
    varResult VARCHAR2(2000); 
BEGIN 
    varResult := 'Select AC_NO||'',''||NAME From     
       (Select AC_NO, NAME From Tab1 Where PRODUCT_CD = '''||ProdCd||''')'; 
    BEGIN --> Exception handling missed 
    EXECUTE IMMEDIATE varResult INTO p_result_out; 
    EXCEPTION 
    WHEN OTHERS THEN --> Others is broad term you can catch specific exceptions like no data found too many rows etc 
    NULL;   -- Your action logic 
    END; 
    RETURN p_result_out; 
END funGetAccount;