2

由于最终用户的键盘配置不正确,某些无效字符有时会插入到数据库中。

我们有一个 pl/sql 脚本,它遍历所有列并替换无效字符。该脚本只需不到一分钟即可完成(但我们的系统仍处于测试阶段,并未广泛使用)。

一种解决方案是创建一个触发器,在插入表之前替换无效字符,一种解决方案是使用计划作业来运行所谓的脚本。

哪一个更有效率?

4

3 回答 3

3

如果您使用计划作业,则无效字符仍会在一段时间内出现在您的数据中。如果不是这种情况非常重要,请使用触发器。触发器将确保数据库仅包含有效字符。

我不认为效率在这里很重要。触发器可以轻松跟上用户的数据输入。

于 2012-05-16T12:58:02.283 回答
1

老实说,不是触发器的粉丝。

您可以通过提供标识需要更新的行的索引来提高计划作业的效率。

一般来说,语法类似于:

create index my_speshul_index on my_table(
  case when some_expression then 1 else null end);

some_expression 是检测这些字符是否存在的表达式——可能是一个 regexp_like。

然后你会查询:

select ... from my_table
where case when some_expression then 1 else null end;
于 2012-05-16T12:48:27.610 回答
0

另一种方法是允许数据按原始类型进入数据库,但创建一个包含已清理数据的虚拟列。

但是,这只有在问题仅限于几列时才可行。由于它可以是所有用户可输入的列,因此带有 regexp_replace 的触发器似乎是最好的方法。根据您允许的字符,它可以像一系列语句一样简单,例如

 :new.columnA := regexp_replace(:new.ColumnA,'[^[:print:]]','');

也就是说,只需删除所有不可打印的字符。

于 2012-05-16T13:15:07.733 回答