2011-07-27 130 views
1

在Crystal Reports中,您可以將SQL直接作爲字符串傳遞給報表參數,並在報表運行時解析SQL。BIRT Reports,將SQL傳遞給查詢參數

例如,假設您想安排一份報告,以便在每個月的月初運行有關前一個月的數據。特定報表的查詢可能是這樣的:

SELECT 
    sum(jobid) jobs 
FROM 
    job 
WHERE 
    created_date >= {?StartDate} 
    and created_date < {?EndDate} 

取而代之的起始日期和結束日期參數設置爲日期字段,並具有更新每個月你可以設置參數字符串和送出妙傳報告的參數以下SQL中的每個參數:

StartDate = add_months(trunc(sysdate, 'mm'), -1) 
EndDate = trunc(sysdate, 'mm') 

這種方式每次計劃報表運行時都會自動確定運行的正確日期。它的工作原理是因爲Crystal報表以文字形式傳遞參數,而不是'trunc(sysdate,'mm')'。

是否有可能將SQL傳遞給BIRT報告參數?我正在使用BIRT plug-in for Eclipse,並且不斷收到ORACLE錯誤,表明BIRT將參數傳遞給查詢,作爲使用單引號引起來的SQL字符串。

+0

你能解釋爲什麼你想把SQL傳遞給報表參數嗎?正如MystikSpiral指出的那樣,這會導致SQL注入攻擊的風險 - 請參閱:http://xkcd.com/327/ –

+0

這是否取決於您是否面臨SQL攻擊的風險?如果在服務器端完成並且沒有原始用戶輸入,我不會看到風險。 – Rebzie

回答

1

我不認爲你想這樣做(這是可能的,但不是可取的)。您可以將報告打開爲SQL注入攻擊。所以我可以限定回答你的問題,如果你真的想這樣做,你可以在數據集打開事件中設置「this.query」爲你的參數值。

更重要的是,尋找問題的根源。你在用什麼驅動程序?最終,驅動程序準備並執行BIRT的查詢。您可以使用相同的驅動程序成功執行BIRT之外的查詢嗎?另一個地方是報告中設置的參數。參數是強類型的嗎?它需要進行強類型化處理,以確保當它被替換爲「?」時,它可以正確插入到查詢文本中。您在根查詢中佔位符。

祝你好運!