我在互聯網上搜索了 2 天以找到答案,但找不到。
基本上我有這個問題:“登錄由名字的第一個字母和名字的前 7 個字母(小寫)后跟兩個數字組成。”
我的問題在于最后 4 個單詞“后跟兩個數字”。第一部分我已經正確完成并驗證了它,但我似乎無法找到上面指定問題的答案。
我試著做這樣的事情。
CONSTRAINT ck_user_login CHECK
(login LIKE SUBSTR(prenom,1, 1) || LOWER(SUBSTR(nom, 0, 7)) || '%[0-9]%')
但這似乎不起作用。
所有幫助將不勝感激。先感謝您。
uj5u.com熱心網友回復:
我將分兩步進行:首先檢查first 和 last name,然后檢查digits。像這樣的東西:
SQL> CREATE TABLE test
2 (
3 prenom VARCHAR2 (10),
4 nom VARCHAR2 (10),
5 login VARCHAR2 (20)
6 );
Table created.
SQL> ALTER TABLE test
2 ADD CONSTRAINT ck_user_login CHECK
3 ( SUBSTR (login, 1, LENGTH (login) - 2) LIKE
4 SUBSTR (prenom, 1, 1) || LOWER (SUBSTR (nom, 1, 7))
5 AND REGEXP_LIKE (login, '\d{2}$'));
Table altered.
測驗:
SQL> INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfoot23');
1 row created.
SQL> INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfootacd23');
INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfootacd23')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CK_USER_LOGIN) violated
SQL> INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfoot235');
INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfoot235')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CK_USER_LOGIN) violated
SQL> INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfoot23x');
INSERT INTO test (prenom, nom, login) VALUES ('little', 'foot', 'lfoot23x')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CK_USER_LOGIN) violated
SQL>
uj5u.com熱心網友回復:
兩位數是'[0-9][0-9]',不是'%[0-9]%';但是,LIKE 操作員確實理解這一點。LIKE 可以做的最好的事情是測驗名稱后面是否有兩個字符
CONSTRAINT ck_user_login CHECK
(login LIKE SUBSTR(prenom, 1, 1) || LOWER(SUBSTR(nom, 1, 7)) || '__')
由于登錄是固定長度的,因此無需添加%指定任何字符可以多次出現的通配符。
您必須使用REGEXP_LIKE更復雜的模式
CONSTRAINT ck_user_login CHECK (
login LIKE SUBSTR(prenom, 1, 1) || LOWER(SUBSTR(nom, 1, 7)) || '__' AND
REGEXP_LIKE( SUBSTR(login,-2), '[0-9][0-9]' )
)
我建議不要將整個登錄名與 REGEXP 進行比較,因為那樣的話,如果任何字符與特殊的 REGEXP 字符沖突,您將不得不轉義名稱部分。
其他 SQL 方言允許更復雜的 LIKE 運算子,例如Like P[A-F]###Access中的或Transact-SQLLIKE '[0-9]'中的字符范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522696.html
標籤:sql甲骨文级联检查约束
下一篇:Oracle觸發器排除條件
