Sql Oracle触发器未执行-INSTR函数问题

Sql Oracle触发器未执行-INSTR函数问题,sql,oracle,Sql,Oracle,我试图编写一个触发器来检测用户名何时包含非法字符串(如淫秽内容) 我有两个小表:Player和IllegalWords,其中IllegalWords包含检查用户名的单词 我使用Oracle版本11g R2在www.sqlfiddle.com上测试了代码 当用户名与非法单词匹配(包括大小写不同的情况)时,触发器工作。但是,当非法单词是用户名的子字符串时,它会失败。例如,它无法检测到悲伤小丑包含小丑 我不明白为什么,因为我使用了INSTR函数 有人能帮我理解吗 谢谢, 信用证 结果: PLAYERI

我试图编写一个触发器来检测用户名何时包含非法字符串(如淫秽内容)

我有两个小表:Player和IllegalWords,其中IllegalWords包含检查用户名的单词

我使用Oracle版本11g R2在www.sqlfiddle.com上测试了代码

当用户名与非法单词匹配(包括大小写不同的情况)时,触发器工作。但是,当非法单词是用户名的子字符串时,它会失败。例如,它无法检测到悲伤小丑包含小丑

我不明白为什么,因为我使用了INSTR函数

有人能帮我理解吗

谢谢,

信用证

结果:

PLAYERID, USERNAME, ISLOCKED
1, clown, 1
2, Clown, 1
3, sadclown, 0
4, clown_is_sad, 0

问题在于Word的数据类型:

CREATE TABLE IllegalWords
(
    Word CHAR(100)
)/

我不知道为什么,因为文档说
CHAR
应该可以工作,但是如果我碰巧将数据类型设置为VARCHAR2,它就会工作。

看起来像SQLFIDLE中的一个bug。你在实际的Oracle数据库上试过这段代码吗?我在实际的数据库(9.2版)上试过同样的代码,结果是一样的。太棒了!它起作用了。我自己永远也找不到这个。非常感谢您的帮助。@Icazarre:CHAR字段的右边会自动填充为空白,直到字段的整个宽度。VARCHAR2只存储给定的字符。因此,当‘Krusty’存储在CHAR(20)中时,“Krusty”+14个空格就是字段中记录的内容。存储在VARCHAR2(20)字段中的相同值是“Krusty”,没有空白填充。一般来说,使用VARCHAR2——它会帮你省去很多悲伤和失眠的夜晚。分享和享受。
CREATE TABLE IllegalWords
(
    Word CHAR(100)
)/