簡體   English   中英

Oracle DB的SSRS報告 - 使用存儲過程

[英]SSRS Report from Oracle DB - Use stored procedure

我正在Sql Server Reporting Services 2005中開發一個報告,連接到Oracle 11g數據庫。 當您發布回復時,或許有助於了解我熟練掌握MSSQL Server並且缺乏Oracle經驗。

我有多個嵌套的子報表,需要在外部報表中使用摘要數據和相同的數據,但在內部報表中有詳細說明。 為了避免DB服務器多次執行,我想在開頭填充一些臨時表,然后在報表和子報表中多次查詢它們。

在SSRS中,數據集顯然按它們在RDL文件中出現的順序執行。 並且您可以擁有不返回行集的數據集。 所以我創建了一個存儲過程來填充我的四個臨時表,並使其成為我報告中的第一個數據集。 當我從SQLDeveloper運行它時,此SP可以工作,我可以查詢臨時表中的數據。 但是,這似乎沒有成功,因為SSRS顯然沒有重用相同的會話,所以即使全局臨時表是使用ON COMMIT PRESERVE ROWS創建的,我的數據集也是空的。

我切換到使用“真正的”表,現在傳入一個額外的參數,一個字符串形式的GUID,在每次新執行時唯一生成,這是每個表的主鍵的一部分,所以我可以只返回行的這個執行。

從Sql Developer運行此工作正常,例如:

DECLARE
ActivityCode varchar2(15) := '1208-0916      ';
ExecutionID varchar2(32) := SYS_GUID();
BEGIN
CIPProjectBudget (ActivityCode, ExecutionID);
END;

不要緊,在這個例子中我不知道GUID,這只是證明它有效,因為行插入到我的四個表中。

但是在SSRS報告中,我的數據集中仍然沒有行,SQL Developer確認沒有插入任何行。

所以我想的是:

  • Oracle使用隱式事務,我的更改沒有提交?
  • 即使我可以證明返回SP的非行集正在執行(因為如果我省略參數映射,它會在報告呈現時抱怨沒有足夠的參數),也許它並沒有真正執行。 不知何故。
  • 錯誤的執行順序不是問題或行會出現在表中,而它們不是。

我對如何實現這一點的任何想法感興趣(特別是關於不多次運行主要查詢的部分)。 我會重新設計我的整個報告。 我將停止使用存儲過程。 建議你喜歡的任何東西! 我只是需要幫助讓這個工作,我被卡住了。

如果你想要更多的細節,在我的SSRS報告中,我有一個List對象(它是一個容器,對數據集中的每一行重復一次),它有一些標題值,然后包含一個子報告。 最終,將有四個總報告:一個主報告,三個嵌套子報告。 每個子報表都將位於父報表的列表中。

嘆。

在SP中選擇的列具有char數據類型,但SP具有varchar2輸入參數。 在Oracle中, varchar2變量實際上丟失了它們的尾隨空格(與SQL Server不同)。 最重要的是,我正在從數據庫查詢的SSRS參數上執行RTrim()

對於那些可能想知道的人... Oracle中的SP無法返回行集。 因此,如果您從SSRS運行SP,則可能是填充表格。 但SSRS默認情況下通常同時運行查詢。 要使它以串行方式運行查詢以便以后的查詢可以正確地依賴於早期查詢的結果,編輯運行SP的數據集,單擊“數據源”下拉列表旁邊的“...”按鈕,然后檢查底部是“使用單筆交易”復選框。 只要SP是RDL文件中列出的第一個數據集,它就應該先運行,其他數據集將一直運行直到它完成運行。 注意:此設置適用於使用相同數據源的所有數據集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM