Oracle具有替换功能的独特约束

时间:2016-06-20 14:31:54

标签: oracle constraints

我不确定这是否可行,但我想问社区。

我有一个包含用户上传到我网站的文件名的列。我想创建一个唯一的约束来删除文件名列中的所有空格,这样即使用户犯了错误并添加了额外的空格,约束也会引发错误。

我想在我的表中创建一个新列并在插入文件名时删除所有空格,但我想看看是否可以动态完成。

我认为性能会受到重创,如果是这样,我会在表格中创建新列。有没有更好的方法来检查文件名是否在我的表中,并且有些包含用户为捕获重复项而犯的一些简单错误?

1 个答案:

答案 0 :(得分:3)

您可以创建基于函数的唯一索引。这是一个例子:

create table test_table (
  filename varchar2(50)
)
/

create unique index test_table_filename_idx on test_table(replace(filename, ' ', null))
/

insert into test_table (filename) values ('abc')
/

insert into test_table (filename) values ('a b c')
/

由于基于函数的索引,第二个插入产生了预期的错误:

  

ORA-00001:违反了唯一约束(TEST.TEST_TABLE_FILENAME_IDX)