因為同事有需求要限制使用者輸入文字時使用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)字符表可以參考以下的說明:

https://reurl.cc/OAZ1DX

還有透過unicode也可以用:

Microsoft Windows:CR/LFu'\000D\000A'
Unix(包括 Apple MacOS):LFu'\000A'
IBM OS390:NELu'\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;

 

arrow
arrow
    文章標籤
    oracle
    全站熱搜

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()