我有一个基于SQL命令的Crystal Report,它部分由过程名称组成。我尝试做的是向SQL命令添加一个多值字符串参数,以便最终用户可以输入部分过程名称,报告将只返回字符串匹配的相关过程。
例如,用户应该能够输入"%KNEE%"和"%HIP%"进入参数并返回包含单词" KNEE"的所有过程。和" HIP"。问题是我无法弄清楚如何操纵SQL中的参数值来实现这一目标。我之前使用报告参数(而不是SQL Command参数)通过简单地将行{table.procedure_name} like {?name match parameter}
添加到记录选择公式来完成此操作,但在SQL命令中采用相同的方法会得到一个& #34; ORA-00907:缺少右括号"错误。
有关如何操作多值字符串参数以实现此目的的任何建议吗?
答案 0 :(得分:1)
我不想将此作为答案发布,因为我不关心解决方案,但这是我找到解决此问题的唯一方法。 我必须指示用户在参数提示符下输入'%KNEE%','%HIP%','%ETC%'。那么像{?name match parameter}这样的{table.procedure_name}应该可以在SQL中使用。不是最佳的,特别是对于具有%的情况。我很想听到有人提供更好的解决方案,因为我已经多次摔跤了。
答案 1 :(得分: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,
...