2017-08-17 24 views
0

在SAP HANA中,我可以創建一個包含輸入參數和輸出參數的過程。即使沒有輸出參數,該過程也可以輸出一個表格。SAP HANA存儲過程輸出類型以及如何在SQLScript中重用/捕獲輸出

我注意到在存儲過程中輸出的三個版本:

  1. 一個選擇在過程結束 - 沒有聲明的結構。
  2. 輸出參數out parameter varhcar(100)
  3. 後功能參數隱式表定義returns table (var1 varchar(10))和關鍵字LANGUAGE SQLSCRIPT

是什麼的這些區別,我怎麼能重複使用這些輸出參數在其他存儲過程之前?

唯一一個我所知道的是

  • call procedure(input1, input1, outputVar)
  • 不幸的是,我不知道如何在不創建一個綁定的SQL結果輸出參數一個物理表。

    之所以有這樣的問題

    1期

    功能callBuildJoinOn返回空的結果。由於SP_BUILD_JOIN_ON這個循環不執行 - 但名單是建立在分裂字符串(包括測試)

    Proceedure callBuildJoinOn 
    ... 
    in colTable1 nvarchar(200) 
    out columnsTable1 "SCHEMA"."package::TT.STRING_LIST" 
    call "SCHEMA"."package::SP_SPLIT_STRING"(colTable1, columnsTable1); 
    call "SCHEMA"."package::SP_BUILD_JOIN_ON"(:columnsTable1, :columnsTable2, :joinOn); 
    
    SP_BUILD_JOIN_ON 
    columnsTable1 "SCHEMA"."package::TT.STRING_LIST" 
    declare cursor columnList for 
        select * from :columnsTable1; 
    for col as columnList do 
        joinOn := joinOn || 'a.' || col.item; 
    end for; 
    

    爲什麼一分爲二的功能呢?

    在編譯器錯誤光標結果的申報,如果調用語句後

    回答

    1

    甚至還有第四個選項來獲得從HANA SQLScript過程的結果集:結果視圖(不再支持作爲HANA2的) 。

    但是,我們不要激起更多的困惑。 不同的選項可以在不同的情形中使用:

    1. 步驟IN/OUT參數被用於將數據放入和結果出來的程序。 OUT參數可以綁定到其他SQLScript變量(當您從另一個過程調用該過程時),或者HANA客戶端可以讀取爲類型爲TABLE的每個OUT參數創建的結果集。例如,JDCB客戶端可以在過程執行後找到多個結果集並獲取這些結果集。

    2. 表功能,這是返回表的功能,可用於就像表或視圖:

      SELECT * FROM <tablefunction>(in_param1, in_param2, ...); 
      

      這提供了一個容易的選擇,從功能看回整個表或模擬參數化觀點。

    3. 您提到的其餘選項是所謂的「默認結果集」。這實際上只對在SQL編輯器或HANA客戶端中使用有用,該客戶端在過程執行後獲取所有結果集。默認結果集不能綁定到任何SQLScript變量,也不能在SQL命令中引用。

    +0

    THX的脫落一些輕到這個話題。我仍然在努力重複使用這個https://stackoverflow.com/a/27709213/993494拆分函數的輸出:我不能將'rst'分配給輸出變量:/ –

    +0

    如果是關於拆分功能本身,那裏相反,現在可以使用相當長時間的REGEXPR功能。如果是關於實際的任務,可以請您用一個可重現的問題示例來提出一個新問題? –

    +0

    是的這個線程是關於參數和如何與他們合作..這個問題也沒有完全解答:如何在另一個過程中重用一個過程的返回表(...)? –

    0

    問題是joinOn被定義爲輸出參數:out joinOn nvarchar(1000)

    這導致的是:

    1. 變量是空
    2. 變量未填充:joinOn := joinOn || 'a.' || col.item;導致null

    解決方案

    1. 變化outinout
    2. 初始化參數joinOn := ''