我有一个基于表的块。如果我在输入查询模式下输入“12345”,它将使用
创建一个查询WHERE my_field = '12345'
如果我输入“12345A”,它就会
WHERE (upper(my_field) = '12345A' AND my_field like '12%')
这很糟糕,因为my_field正常编制索引(不在上层(my_field))。我试图在混合和上层之间切换“案例限制”属性,并且在“是”和“否”之间“不区分大小写查询”,似乎没有任何帮助。我还有一个块级PRE-QUERY触发器(触发器以RETURN;语句开始)设置为覆盖,所以没有什么应该搞乱查询的形成,但它仍然会混乱。
关于我还能尝试什么的任何想法?
编辑:
在WHEN_NEW_FORM_INSTANCE触发器中有一个模糊的函数调用触发到某个附加库,它将所有触发器块的项重置为CASE_SENSITIVE_QUERY = TRUE。永远不会猜到。
答案 0 :(得分:1)
不确定查询如何更改为该表单; WHERE(upper(my_field)='12345A'AND my_field like'12%'
首先检查表单中是否没有输入查询或预查询触发器。有人可能会在更高级别附加触发器。重写查询并不是那么聪明。检查你是否正在关注表而不是视图或存储过程,...
如果所有其他方法都失败,请在数据黑色中启用查询触发器并自行重写where子句。这很简单。
在发布之前提供oracle表单的版本。
答案 1 :(得分:0)
my_field like '12%'
使用索引。然后用
过滤子集upper(my_field) = '12345A'
所以它可能没有你想象的那么糟糕......
答案 2 :(得分:0)
最天真的问题,你能更新专栏吗?它全都是大写的吗?我的意思是它会给你的应用带来一些不便吗?
如果可以,可以使用数据库触发器来处理它,以确保它总是大写。
如果你不能,那么我建议你创建另一个用数据库触发器更新为大写的字段。
您还可以创建一个函数索引,使其位于上方(my_field)。