因為同事有需求要限制使用者輸入文字時使用enter(/n),
想起Oracle中有提供check這個限制物件,
這邊就簡單紀錄一下測試的過程。
在Oracle中,enter鍵在win系統裡是 chr(13)
,
所以我們要針對這個符號來做限制。
CHR(10) => LF, line feed (unix)
CHR(13) => CR, carriage return (windows, together with LF)
其他的CHR(number)字符表可以參考以下的說明:
還有透過unicode也可以用:
Microsoft Windows:CR/LF 或 u'\000D\000A'
Unix(包括 Apple MacOS):LF 或 u'\000A'
IBM OS390:NEL 或 u'\0085'
建立table:
CREATE TABLE Z_TEST
(
IDSE VARCHAR2(100 BYTE) NULL,
CREATEDATETIME DATE DEFAULT sysdate NULL
)
TABLESPACE USERS;
新增CONSTRAINT Check:
ALTER TABLE Z_TEST ADD (
CONSTRAINT CHECK_TB_TEST
CHECK (IDSE = replace(IDSE,chr(13),''))
ENABLE VALIDATE);
check中的條件(上面紅色標示的部分),資料需要符合(true)才會允許insert,若是錯誤則會回應Ora錯誤。
新增測試資料:
SET DEFINE OFF;
Insert into Z_TEST
(IDSE, CREATEDATETIME)
Values
('1', sysdate);
COMMIT;
1 row created.
Commit complete.
Insert into Z_TEST
(IDSE, CREATEDATETIME)
Values
('2'||CHR(13), sysdate);
COMMIT;
>> Insert into Z_TEST
(IDSE, CREATEDATETIME)
Values
('2'||CHR(13), sysdate)
Error at line 1
ORA-02290: 違反檢查條件 (CHECK_TB_TEST)
Script Terminated on line 14.
Insert into Z_TEST
(IDSE, CREATEDATETIME)
Values
(CHR(13)||'3', sysdate);
COMMIT;
>> Insert into Z_TEST
(IDSE, CREATEDATETIME)
Values
(CHR(13)||'3', sysdate)
Error at line 1
ORA-02290: 違反檢查條件 (CHECK_TB_TEST)
Script Terminated on line 14.
額外補充一下:
啟用CONSTRAINT Check:
ALTER TABLE Z_TEST
ENABLE CONSTRAINT check_tb_test;
停用CONSTRAINT Check:
ALTER TABLE Z_TEST
DISABLE CONSTRAINT check_tb_test;
刪除CONSTRAINT Check:
alter table Z_TEST
drop constraint check_tb_test;
留言列表