有一个表示字符串的变量:
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
是否包含除数字,字母和#和_以及$之外的特殊字符?
答案 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 ........
........