如何在Oracle表单中创建区分大小写的查询?

时间:2011-08-05 11:36:25

标签: oracle oracle11g oracleforms

我有一个基于表的块。如果我在输入查询模式下输入“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。永远不会猜到。

3 个答案:

答案 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)。