我不确定这是否可行,但我想问社区。
我有一个包含用户上传到我网站的文件名的列。我想创建一个唯一的约束来删除文件名列中的所有空格,这样即使用户犯了错误并添加了额外的空格,约束也会引发错误。
我想在我的表中创建一个新列并在插入文件名时删除所有空格,但我想看看是否可以动态完成。
我认为性能会受到重创,如果是这样,我会在表格中创建新列。有没有更好的方法来检查文件名是否在我的表中,并且有些包含用户为捕获重复项而犯的一些简单错误?
答案 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)