- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
-- Согласная ли буква (кроме 'Ц')
FUNCTION is_soglasn(letter IN CHAR
) RETURN BOOLEAN IS
BEGIN
IF letter IN ('Б', 'В', 'Г', 'Д', 'Ж', 'З', 'К', 'Л', 'М', 'Н',
'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ч', 'Ш', 'Щ',
'б','в','г','д','ж','з','к','л','м','н',
'п','р','с','т','ф','х','ч','ш','щ')
THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END is_soglasn;
Но почему нужно было дублировать массив для строчных и прописных вместо LOWER(letter) ... =\
оставить просто return letter in...
А ещё лучше просто завести константу soglans_set и вместо is_soglasn писать прямо letter in soglasn_set
Какой тогда синтаксис у оператора in будет?
Если его нет, а есть только неразделимая конструкция if ... in ... , то извините.
Если да, то думайте головой, прежде чем спорить.
Отвечаю на вопросы:
> дооо, и какого типа этот soglans_set?
Такого же, как и выражение справа от IN
> Какой тогда синтаксис у оператора in будет?
Такой же, какой и был.
в sql еще подзапрос разрешается справа (тоже в скобках)
другие варианты использования in в качестве оператора - не знаю (как с if, так и без него)
Множество можно устроить, но оно там - непришейкобылехвост:
проще тогда от in отказаться:
Тогда печально, извините.
http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm#i1050801
IN operator:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#sthref502
вместо set подразумевалось ('a','b','c', ...)
Писец, у них даже текстовое определение конфликтует с графом:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/boolean_other_expression.gif
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/img_text/boolean_other_expression.htm
return regexp_like(lower(letter), '[^цуеыаоэяию]');
return lower(letter) between 'б' and 'щ' and regexp_like(lower(letter), '[^цеёийоу]');