如何限制oracle DB中的特殊字符

时间:2017-05-23 08:08:19

标签: regex oracle regexp-like

如何限制特定列接受特殊字符。? 这可以用REGEXP_LIKE完成吗?除了下面的字母数字之外,还允许从文本字段中添加特殊字符,并且不能在定义中添加约束。必须在不匹配时处理此case语句,然后引发错误,否则填充相同的值。

    !
    #
    $
    %
    &
    space
    (
    )
    +
    ,
    -
    .
    /
    :
    ;
    <
    =
    >
    ?
    @
    [
    \
    ]
    _


   DECLARE
   A VARCHAR2(100);
   B VARCHAR2(100);
   BEGIN
   A :='_  _\@?=><?:;:>./.-+(%$#!;:aA10b$a9#%-.(@B=Aa1+z0,!#$% ),(+,-./;_  <\_:<>=?@\_  ';

    SELECT CASE WHEN regexp_like(A,'^[A-Za-z0-9!#$%()+,-./;:<>=?@\_&[:space:]]+$')
    THEN 'TRUE' ELSE 'FALSE' END CASE INTO B
    FROM DUAL;

    DBMS_OUTPUT.PUT_LINE(B);
  END;

尝试下面并获得所需的输出。感谢。

    DECLARE
    A VARCHAR2(100);
    B VARCHAR2(100);
    BEGIN
    A :='_  _\@?=><?:;:>./.-+(%$#!][;:aA10b$a9#%-.(@B=Aa1+z0,!#$% ),(+,-./;_  <\_:<>=?@\_ [ ';

    SELECT CASE WHEN regexp_like(A,'^[][[:alnum:][:space:]!#$%()+,-./;:<>=?@\\_&]+$')
    THEN 'TRUE' ELSE 'FALSE' END CASE INTO B
    FROM DUAL;

    DBMS_OUTPUT.PUT_LINE(B);
    END;

0 个答案:

没有答案