Ole*_*kyi 0 regex sql oracle oracle-sqldeveloper
我有以下问题:我想用他的 id 和名称创建一个表 Client 。我还想检查“名称”字段是否仅包含字母。这是我的查询:
CREATE TABLE CLIENT(
ID NUMBER PRIMARY KEY,
FIRST_NAME CHAR(10) CONSTRAINT NAME_CHECK CHECK(REGEXP_LIKE(FIRST_NAME, '^[A-Za-z]*$'))
);
Run Code Online (Sandbox Code Playgroud)
该脚本运行良好,正在创建表。但是下面的 INSERT 语句
INSERT INTO CLIENT
VALUES(1, 'BOB');
不起作用。这是错误文本:
INSERT INTO CLIENT
VALUES(1, 'BOB')
Error report -
ORA-02290: check constraint (TASK8.NAME_CHECK) violated
Run Code Online (Sandbox Code Playgroud)
我确信这个错误的原因是相当明显的,但我就是不明白。我以前从未遇到过正则表达式的问题。
提前致谢
我的猜测是问题是空格。 CHAR()数据类型会自动用空格填充长度。
因此,可变长度字符串比固定长度字符串更常用。在 Oracle 中,这将是一种VARCHAR2()类型:
CREATE TABLE CLIENT (
ID NUMBER PRIMARY KEY,
FIRST_NAME VARCHAR2(10) CONSTRAINT NAME_CHECK CHECK (REGEXP_LIKE(FIRST_NAME, '^[A-Za-z]*$'))
);
Run Code Online (Sandbox Code Playgroud)
我还可以添加一些注释:
clientIdor client_id,而不是通用的id。这允许大多数外键引用使用完全相同的名称。| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |