如何防止使用Oracle输入某些字母

问题描述 投票:0回答:3

该代码是视频的类别,用一个大写字母表示,不包括I,O,Q,V,Y和Z,后跟数字字符。

到目前为止,我已经猜到了。关于如何解决它的任何建议?

create table channelTable (
    channelID number NOT NULL,
    ChannelName varchar(100) NOT NULL,
    ChannelDate date NOT NULL,
    UserName varchar(100) NOT NULL UNIQUE,
    TopicCode varchar(4) NOT NULL);

    CONSTRAINT channelID_pk PRIMARY KEY (channelID)
    CONSTRAINT c_topicCode LIKE '[A-Za-z][0-9] NOT (I,O,Q,N,Y,Z)
);

sql regex oracle constraints check
3个回答
3
投票

一些评论:

  • NOT NULL列不需要。[>
  • 在Oracle中,使用PRIMARY KEY
  • 然后,我建议使用正则表达式。如果该值正好是两个字符,则应这样声明:

VARCHAR2()

或更简单地说:

create table channelTable (
    channelID number,
    ChannelName varchar(100) NOT NULL,
    ChannelDate date NOT NULL,
    UserName varchar2(100) NOT NULL UNIQUE,
    TopicCode char(2) NOT NULL;

    CONSTRAINT channelID_pk PRIMARY KEY (channelID)
    CONSTRAINT check (REGEXP_LIKE(c_topicCode, '^[A-HJ-NPR-UYZ][0-9]$') 
);

话虽如此,我宁愿看到一个填充有正确值的 CONSTRAINT REGEXP_LIKE(c_topicCode, '^[A-Z][0-9]$') AND NOT REGEXP_LIKE(c_topicCode, '^[IOQNYZ]')) 表。然后,您可以使用外键关系来定义适当的代码。


2
投票

使用正则表达式TopicCodes匹配不包含^[A-HJ-MPR-X]\d$的大写字符,后跟数字:


1
投票

请考虑以下检查条件:

© www.soinside.com 2019 - 2024. All rights reserved.