2016-02-24 177 views
0

我有一個基於SQL命令的Crystal Report,其中一部分由過程名組成。我想要做的是向SQL命令添加一個多值字符串參數,以便最終用戶可以輸入部分過程名稱,報告將只返回那些字符串匹配的相關過程。如何在Crystal Reports中處理SQL命令的多值字符串參數

例如,用戶應該能夠在參數中輸入「%KNEE%」和「%HIP%」並返回包含單詞「KNEE」和「HIP」的所有過程。問題是,我無法弄清楚如何操縱SQL中的參數值來完成此操作。我之前用報告參數(而不是SQL命令參數)做了這個,只需將行{table.procedure_name} like {?name match parameter}添加到記錄選擇公式中,但在SQL命令中採用相同的方法會得到一個「ORA-00907:缺少權限括號「錯誤。

關於如何操作多值字符串參數來實現這一點的任何建議?

回答

1

我不喜歡張貼這個答案,因爲我不在乎解決方案,但它是我發現解決這個問題的唯一方法。 我不得不指示用戶在參數提示中輸入'%KNEE%','%HIP%','%ETC%'。然後像{?名稱匹配參數}這樣的{table.procedure_name}應該在你的SQL中工作。不是最優的,特別是對於您的%的情況。我很想聽到有人提供了更好的解決方案,因爲我已經多次摔跤了。

+0

另一種可能性是如果只有幾個可能的條目向用戶提供多個參數並連接那些每個都被「包圍」,並在LIKE後使用該結果 – CoSpringsGuy

+0

這與我所做的很接近。我最終只是將一個值參數傳遞給一個'regex_like()',併爲用戶提供了對正則表達式的字符串匹配的完全控制。我不指望他們對此很感興趣,但它讓我可以選擇在參數下拉菜單中添加複雜模式。 – Ryan

0

這裏有一個辦法:

SELECT column0 
FROM table0 
INNER JOIN (
    SELECT trim('%' || x.column_value.extract('e/text()') || '%') SEARCH 
    FROM (SELECT 'arm,knee' options FROM dual) t, 
    TABLE (xmlsequence(xmltype('<e><e>' || replace(t.options,',','</e><e>')|| '</e></e>').extract('e/e'))) x 

) v ON column0 LIKE v.search 

使用Oracle的XML功能,以逗號分隔字符串轉換爲行的同等數量,每個包裹子句與%%。然後將這些行連接到所需的表格。

要使用CR使用,創建一個單值,字符串參數,並將其添加到代碼:

... 
FROM (SELECT '{?search_param}' options FROM dual) t, 
... 
相關問題