通常需要根据某些指定值在数据库中进行搜索。对于此问题,请考虑有一个表格,其中包含多个键K = {K1, K2 ... Km}
和多个元列C = {C1, C2 ... Cn}
。元列不包含在任何键中。在搜索条件定义为S = {Ki, Cj1, Cj2 ... Cjh}
的情况下执行查询的优雅高效方法是什么?
澄清:
现实生活中的例子(故事处理系统):
要求是能够使用为元列提供的任意数量的可选过滤器搜索任何键。
可能的解决方案:
table.column = NVL(paratemers.column, table.column)
的表达式。我不确定Oracle是否会优化查询的那一部分以避免在parameters.column
为NULL
时进行比较 - 这是问题的一部分。如果是,也许这就是问题的解决方案。有没有不牺牲性能的优雅解决方案?
答案 0 :(得分:1)
带有绑定变量的动态SQL是可行的方法。您发布的“原因”链接正确地反对具有连接值的动态SQL - 尽管它的标题确实表明它引用了所有动态SQL。实际上,它继续展示如何使用绑定变量执行动态SQL:
"SELECT * FROM SomeTable Where Field1 = @FirstValue AND SecondField = @SecondField"
现在,当某些条件(或因某些原因而调用它们的“元列”)是可选的时,您可以根据已指定的值构建动态SQL,并在运行时绑定值。