Stored-Procedures

未從 iSeries DB2 SQL 儲存過程獲取 SSRS 2008r2 中的結果集

  • November 4, 2013

在閱讀了 DB2 UDB for iSeries SQL Programming Concepts V5R2 的“定義 SQL 過程”部分和 i5/OS 資訊中心第 5 版第 4 版的“從儲存過程返回結果集”部分後,我創建了以下儲存過程:

CREATE PROCEDURE TESTDAT.REPORT (IN DATESTART DATE, IN DATEEND DATE)
LANGUAGE SQL READS SQL DATA
BEGIN
   DECLARE CSR1 CURSOR WITH RETURN FOR
   SELECT *
   FROM  SYSIBM.SYSDUMMY1;

   OPEN CSR1;
   RETURN;
END

接下來,我閱讀了同一 i5/OS 資訊中心第 5 版第 4 版的“範例 1:呼叫返回單個結果集的儲存過程”部分,並嘗試從 SqlDbx 客戶端(通過 ODBC)或 SSRS 報告(通過IBMDASQL 提供程序)使用以下語句:

CALL TESTDAT.REPORT (DATE('11/01/2013'), DATE('11/03/2013'));

它執行成功,但沒有返回結果集。通過 iSeries 導航器成功執行此操作返回 2 個語句 - 選擇和聲明游標。打電話

SELECT * FROM  SYSIBM.SYSDUMMY1;

返回具有 1 行“Y”的 IBMREQD 列。我從上面的文件中遺漏了什麼?

更新:

此過程生成的 SQL 包括除了已經討論過的其他選項:

SPECIFIC TESTDAT.REPORT 
NOT DETERMINISTIC 
READS SQL DATA 
CALLED ON NULL INPUT 
SET OPTION  ALWBLK = *ALLREAD , 
ALWCPYDTA = *OPTIMIZE , 
COMMIT = *NONE , 
DECRESULT = (31, 31, 00) , 
DFTRDBCOL = *NONE , 
DYNDFTCOL = *NO , 
DYNUSRPRF = *USER , 
SRTSEQ = *HEX   

它們中的任何一個都會影響將結果集返回到 SSRS 嗎?

在 SSRS 中報告 iSeries SQL 儲存過程的解決方案是通過將兩個 XML 標記添加到 RSReportDesigner.config 來將 IBM Client Access 附帶的 DB2UDB .Net 提供程序安裝到 BIDS 中。

將以下內容添加到<Data>.config 中的標記:

<Extension Name="DB2UDB" Type="IBM.Data.DB2.iSeries.iDB2Connection,IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9CDB2EBFB1F93A26"/>

將以下內容添加到<Designer>標籤中:

<Extension Name="DB2UDB" Type="Microsoft.ReportingServices.QueryDesigners.GenericQueryDesigner,Microsoft.ReportingServices.QueryDesigners"/>

這會將 DB2UDB 添加到數據源屬性中的提供者列表中。然後,您可以在數據源中使用具有以下格式的連接字元串:

Data Source=<IP of FQDN>;Initial Catalog=<DB name>;UserID=<user ID>;Password=<pass>;

使用者 ID 和密碼需要輸入連接字元串,因為如果輸入憑據選項卡,提供商將無法使用它們。

SSRS 報告嚮導無法基於 SP 創建報告。應改為使用基於臨時選擇語句的報告(select * from sysibm.sysdummy1或任何其他快速選擇都可以)。

創建報表後,可以將其數據集類型從查詢更改為儲存過程。SP 名稱必須手動輸入(下拉列表為空)。必須手動輸入參數(在輸入參數之前不會刷新欄位)。參數名稱需要匹配 SP 和輸入為 的參數值[@<param name>]。日期參數必須指定為文本類型或日期/時間,其值表達式類似於:

=FormatDateTime(Parameters!DATESTART.Value, DateFormat.ShortDate)

如果使用文本類型,請輸入不帶引號的日期,例如:2013 年 10 月 31 日

您在儲存過程聲明中缺少的一件事是DYNAMIC RESULT SETS選項。該選項的預設值為 0,這可能會使客戶端軟體感到困惑。它(客戶端軟體)是否甚至可以處理儲存過程返回的游標是另一回事。

引用自:https://dba.stackexchange.com/questions/52420