0

我有一个基于 SQL 命令的 Crystal Report,该命令部分由过程名称组成。我要做的是向 SQL 命令添加一个多值字符串参数,以便最终用户可以输入部分过程名称,并且报告将仅返回字符串匹配的那些相关过程。

例如,用户应该能够在参数中输入“%KNEE%”和“%HIP%”,并返回所有包含“KNEE”和“HIP”字样的过程。问题是我不知道如何操作 SQL 中的参数值来完成此操作。我之前使用报告参数(而不是 SQL 命令参数)通过简单地将行添加{table.procedure_name} like {?name match parameter}到记录选择公式来完成此操作,但是在 SQL 命令中采用相同的方法得到“ORA-00907:缺少右括号“ 错误。

关于如何操作多值字符串参数来完成此操作的任何建议?

4

2 回答 2

1

我不喜欢将此作为答案发布,因为我不关心解决方案,但这是我发现解决此问题的唯一方法。我不得不指示用户在参数提示符处输入 '%KNEE%','%HIP%','%ETC%'。然后像 {?name match parameter} 这样的 {table.procedure_name} 应该可以在您的 SQL 中使用。不是最佳的,尤其是对于您使用 %. 我很想听到有人提供更好的解决方案,因为我已经为此苦苦挣扎了很多次。

于 2016-02-24T16:37:53.977 回答
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,
...
于 2016-02-24T19:18:40.150 回答