Oracle正则表达式REGEXP_LIKE用于多个列

时间:2015-06-13 04:02:36

标签: sql regex oracle validation if-statement

我想验证TAX,NAME,TELEPHONE NO。那些应该是alpha-numeric.So使用这个方法,但在这里我想知道我可以通过简单的方法做简单的方法,而不使用这么多的“AND”。

  IF REGEXP_LIKE(i.TAX, '^[A-Za-z0-9]+$') AND REGEXP_LIKE(i.NAME, '^[A-Za-z0-9]+$') AND REGEXP_LIKE(VarTelephone , '^[A-Za-z0-9]+$') THEN

      INSERT INTO BIZZXE_V2_SCH.SUPPLIER_CONTACTS
      (CONTACT_ID, SUPPLIER_ID, ADDRESS, ZIP_CODE, COUNTRY_ID, CITY_ID, TELEPHONE, FAX, EMAIL, XMLCOL)
      VALUES(VarContactId ,VarId, k.ADDRESS, k.ZIP_CODE, k.COUNTRY_ID, k.CITY_ID, k.TELEPHONE, k.FAX, k.EMAIL, VarContactDetail);

     ELSE 
       -- Start Return RVAL Messages --
       RVAL.EX_CODE:=1;
       RVAL.MESSAGE:='Supplier Tax and Supplier Name should be apha-numeric that is numbers letters and symbols..!';
       -- End Return RVAL Messages --
     END IF;

1 个答案:

答案 0 :(得分:3)

由于它们都需要匹配相同的正则表达式模式,即字母数字,您可以验证这三个值的串联:

IF REGEXP_LIKE(i.TAX || i.NAME || VarTelephone , '^[A-Za-z0-9]+$')

然而,这与你的问题条件不完全相同,因为如果只有一个或两个值是空的,那么在这种情况下它将被评估为真,而在另一个中则不被评估。

可能的解决方法,如果您需要不同的正则表达式,例如,仅用于验证数字()-+的电话,就可以这样:

IF REGEXP_LIKE(i.TAX || ' ' || i.NAME || ' ' || VarTelephone , 
    '^[A-Za-z0-9]+ [A-Za-z0-9]+ [\d()\-+]+$')

对于这种情况,您必须确保所选的分隔符,在我的情况下,空格将永远不会出现在任何输入文本中。