我正在開發一個連接到Oracle 11g數據庫的Sql Server Reporting Services 2005中的報告。在發佈回覆時,可能會有助於瞭解我熟練使用MSSQL Server並且在Oracle中沒有經驗。來自Oracle DB的SSRS報告 - 使用存儲過程
我有多個嵌套的子報表,需要在外部報表和相同的數據中使用摘要數據,但在內部報表中有詳細說明。爲了讓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使用隱式事務和我的修改沒有得到提交?
- 儘管我可以證明非rowset返回的SP正在執行(因爲如果我省略參數映射,它報告渲染時間關於沒有足夠的參數),也許這不是真的執行。不知何故。
- 錯誤的執行順序不是問題,或行將出現在表中,它們不是。
我對如何做到這一點(尤其是關於不多次運行主查詢部分)的任何想法感興趣。我會重新設計我的整個報告。我將停止使用存儲過程。建議你喜歡的任何東西!我只是需要幫助讓這個工作,我卡住了。
如果您想了解更多詳細信息,在我的SSRS報告中,我有一個List對象(它是一個容器,對於數據集中的每一行重複一次),它具有一些標頭值,然後包含一個子報表。最終將有四個總報告:一個主報告,三個嵌套子報告。每個子報表將在父報告的列表中。
你應該把你的評論的內容放到你的答案中,這樣人們才能更容易地找到它(所以你可以得到更多的代表!)。 ;) – 2010-04-14 11:37:31