0

如何限制特殊字符被特定列接受。?这可以用 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;
4

0 回答 0