Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 是否可以创建电子邮件约束为'@';检查是为了确保电子邮件有@符号_Oracle_Oracle Sqldeveloper - Fatal编程技术网

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上高估了你