如何测试变量是否包含除数字,字母和#和_以及$之外的特殊字符?

时间:2017-12-19 08:41:36

标签: oracle plsql

有一个表示字符串的变量:

create or replace procedure create_user(login varchar2)
is
begin
    execute immediate 'create user "' || login || '" identified by 1 default tablespace tbs_sse';
    execute immediate 'grant create session to "' || login || '"';
    execute immediate 'grant select any sequence to "' || login || '"';
end;

如何测试变量login是否包含除数字,字母和#和_以及$之外的特殊字符?

3 个答案:

答案 0 :(得分:2)

由于您的实际目的是检查该名称是否适合作为Oracle标识符,因此您最好使用内置函数dbms_assert.simple_sql_name,例如:< / p>

  dbms_assert.simple_sql_name(login);
  execute immediate 'create user "' || login ...

如果ORA-44003 string is not a simple SQL name的值不合适,这会引发login

答案 1 :(得分:1)

您可以使用regexp查看。根据您的期望创建正则表达式。

SELECT  count(1) into counter 
FROM    dual
WHERE NOT REGEXP_LIKE (LOGIN_VAR , '^[a-zA-Z0-9_$#]+$');

IF (counter != 0) THEN
    --Invalid Login alert, error return
END IF;    

有关oracle对象命名规则的更多信息,请查看link

答案 2 :(得分:1)

你可能在IF声明中测试 - 可能。如果是这样,您可以使用类似

的内容
........
if regexp_like(login, '[^a-zA-Z0-9_#$]')
then ........
........