2013-12-11 12 views
1

Использование PL/SQL (Oracle 11gR2) Я хочу, чтобы оператор IF проверял, содержит ли строка 1 или более строчных букв.PL/SQL - Я хочу проверить, содержит ли строка символов 1 или более строчных букв

PL/SQL псевдокод:

declare 
v_string varchar2(100) := 'John'; 

begin 
if v_string contain lower-case letter then 
    ... do this 
else 
    ... do something else 
end if; 
end; 

/

+0

Объявление имя varchar2 (200): = 'John'; begin if regexp_like (name, '[: lower:]') then dbms_output.put_line ('lowercase'); else dbms_output.put_line ('uppercase'); end if; конец; / – tale852150

ответ

1

Ответил на мой вопрос, но случайно разместил его в комментариях. Вот оно:

declare 
    name varchar2(200) := 'John'; 
begin 
if regexp_like(name,'[:lower:]') then 
    dbms_output.put_line('lowercase'); 
else 
    dbms_output.put_line('uppercase'); 
end if; 
end; 

/

+0

Вам нужен еще один набор квадратных скобок, чтобы показать, что вы соответствуете классу символов: 'if regexp_like (v_name, '[[: lower:]]') then'. На данный момент вы получаете true, потому что строка содержит 'o', а не потому, что она содержит любой строчный символ. –

1

Тест ли:

v_string != upper(string) 

или нет.

Поиск нулей.

coalesce(v_string,'X') != coalesce(upper(string),'X') 
+1

Строка '123 # $ #' равна 'upper ('123 # $ #')', но не содержит строчной буквы. –

+1

Я сразу изменил смысл своего ответа после первой публикации, что могло привести к путанице. Я все еще смущен этим. Теперь ложиться спать - дай мне знать утром, что я имел в виду. –

0
declare 
    v_name varchar2(200) := 'JOHn'; 
begin 
if regexp_like(v_name,'[:lower:]') then 
    dbms_output.put_line('first test lowercase'); 
else 
    dbms_output.put_line('first test uppercase'); 
end if; 

IF v_name != UPPER(v_name) THEN 
    dbms_output.put_line('second test lowercase'); 


ELSE 
dbms_output.put_line('second test uppercase'); 
END IF; 
end; 

тест его ... выход

первый тест прописные

второй тест в нижнем регистре

Дэвид Олдридж правильно .. ..

+1

Тест 'regexp_like' будет работать, если вы добавили еще один набор квадратных скобок, чтобы показать, что вы соответствуете классу символов:' if regexp_like (v_name, '[[: lower:]]') then'. –

0
if(v_string != upper(string) AND regexp_count(string,'[[:alpha:]]' > 0) 
then 
    -- Has Lower case 
end if 

Он также проверяет, содержит ли строка какие-либо алфавиты!

Смежные вопросы