Oracle 是否可以创建电子邮件约束为'@';检查是为了确保电子邮件有@符号
对。您可以通过对Oracle 是否可以创建电子邮件约束为'@';检查是为了确保电子邮件有@符号,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,对。您可以通过对@符号进行验证检查来创建触发器 大概是这样的: CREATE TABLE Member ( user_ID NUMBER NOT NULL , user_password VARCHAR2(50) NULL CONSTRAINT Email_153906048 CHECK (user_password IN ('%@%')), user_email VARCHAR2(50) NULL CON
@
符号进行验证检查来创建触发器
大概是这样的:
CREATE TABLE Member
(
user_ID NUMBER NOT NULL ,
user_password VARCHAR2(50) NULL CONSTRAINT Email_153906048 CHECK (user_password IN ('%@%')),
user_email VARCHAR2(50) NULL CONSTRAINT Email_1275780631 CHECK (user_email IN ('%@%')),
user_firstName VARCHAR2(20) NULL ,
user_lastName VARCHAR2(20) NULL ,
user_type VARCHAR2(8) NULL CONSTRAINT Type_1346517516 CHECK (user_type IN ('Artist', 'Follower')),
CONSTRAINT XPKUser PRIMARY KEY (user_ID)
);
对。您可以通过对
@
符号进行验证检查来创建触发器
大概是这样的:
CREATE TABLE Member
(
user_ID NUMBER NOT NULL ,
user_password VARCHAR2(50) NULL CONSTRAINT Email_153906048 CHECK (user_password IN ('%@%')),
user_email VARCHAR2(50) NULL CONSTRAINT Email_1275780631 CHECK (user_email IN ('%@%')),
user_firstName VARCHAR2(20) NULL ,
user_lastName VARCHAR2(20) NULL ,
user_type VARCHAR2(8) NULL CONSTRAINT Type_1346517516 CHECK (user_type IN ('Artist', 'Follower')),
CONSTRAINT XPKUser PRIMARY KEY (user_ID)
);
这将检查它是否至少包含一个“@”:
CREATE OR REPLACE TRIGGER members_bi
BEFORE INSERT
ON members
FOR EACH ROW
BEGIN
IF INSTR(:new.user_email, '@') = 0 then
raise_application_error(-20101, 'email must contain AT character');
end if;
END;
/
要确保“@”两边都有东西:
CHECK (user_email LIKE '%@%')
可以使用正则表达式进行更具体的检查。这将检查它是否至少包含一个“@”:
CREATE OR REPLACE TRIGGER members_bi
BEFORE INSERT
ON members
FOR EACH ROW
BEGIN
IF INSTR(:new.user_email, '@') = 0 then
raise_application_error(-20101, 'email must contain AT character');
end if;
END;
/
要确保“@”两边都有东西:
CHECK (user_email LIKE '%@%')
可以使用正则表达式执行更具体的检查。要补充Tony的正确答案,如果您决定要执行更多检查,可以使用多个子句扩展检查约束,例如:
CHECK (user_email LIKE '%_@_%')
检查(
像“%@.%”这样的用户电子邮件必须至少包含一封@和一封后续邮件。
与“%”不同的用户电子邮件不能有两个句点
而用户电子邮件与“%@%@%”不同,在任何地方都不能有两个@
和不象“%@%”的用户电子邮件和不象“%@.%”的用户电子邮件——不能让@和相邻
然后替换(translate(用户电子邮件,[&',:;!=\/()]*%,“”)=用户电子邮件--检查无效字符
)
不要太喜欢规则,因为你不想意外地排除有效地址。要补充Tony的正确答案,如果你决定要做更多的检查,你可以使用多个子句扩展检查约束,例如:
CHECK (user_email LIKE '%_@_%')
检查(
像“%@.%”这样的用户电子邮件必须至少包含一封@和一封后续邮件。
与“%”不同的用户电子邮件不能有两个句点
而用户电子邮件与“%@%@%”不同,在任何地方都不能有两个@
和不象“%@%”的用户电子邮件和不象“%@.%”的用户电子邮件——不能让@和相邻
和替换(翻译(用户电子邮件,[&'',“:;!=\/()]*%,'','',''))=用户电子邮件--检查无效字符
)
尽管你不想意外地排除有效的地址,但不要对规则过于敏感。这些是非常奇怪的约束名称-为什么
Email\u 1275780631
而不是说“Member\u Email\u check”?它们是使用Erwin反向设计的。再次感谢您的帮助。这些都是非常奇怪的约束名称-为什么Email\u 1275780631
而不是说“Member\u Email\u check”?它们是使用Erwin反向设计的。再次感谢您的帮助。为什么要使用触发器而不是检查约束?更新呢?同意。我不知道Oracle现在支持这种约束。这就是为什么我在@tonyandrews上投票给你为什么使用触发器而不是检查约束?更新呢?同意。我不知道Oracle现在支持这种约束。这就是为什么我在TonyAndrews上高估了你