Oracle 约束小写

김택정*_*김택정 0 sql oracle constraints regexp-like

我必须做 oracle 约束来检查用户名是否最少 3 个和最多 10 个小写字母。

我用过了

constraint usernameSMALLCASE check (
    REGEXP_Like(username,'^[a-z]{10}$') or 
    REGEXP_Like(username,'^[a-z]{9}$') or
    REGEXP_Like(username,'^[a-z]{8}$') or 
    REGEXP_Like(username,'^[a-z]{7}$') or 
    REGEXP_Like(username,'^[a-z]{6}$') or
    REGEXP_Like(username,'^[a-z]{5}$') or 
    REGEXP_Like(username,'^[a-z]{4}$') or 
    REGEXP_Like(username,'^[a-z]{3}$')
)
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用。不知何故,放置 $ 会导致问题。但是我必须放 $ 以确保行尾字符也是小写。

Gor*_*off 5

如果您的列声明正确,您的代码应该可以工作。但是你可以大大简化它:

constraint usernameSMALLCASE check ( REGEXP_Like(username, '^[a-z]{3,10}$') )
Run Code Online (Sandbox Code Playgroud)

显然,除了正则表达式之外,还有其他方法可以处理这个问题。但是,您已经开始了正则表达式路线,使用一个就足够简单了。

如果您坚持使用固定长度的列,则可以将其表示为:

constraint usernameSMALLCASE check ( REGEXP_Like(username, '^[a-z]{3,10} *$') )
Run Code Online (Sandbox Code Playgroud)