Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сравнение строки в хранимой процедуре / 8 сообщений из 8, страница 1 из 1
08.04.2008, 17:53
    #35243433
Vintage2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
Добрый день.
Есть задача - в хранимой процедуре на определённом этапе её работы в зависимости от значения строки изменять параметр. Другими словами что-то типа

colr_name varchar(32);
result_price float4;
.........
if (colr_name like '%У[ВДКШ]%') then
result_price =result_price + 80;
end if;
.........

т.е. если строка содержит букву "У" перед В, Д, К, или Ш, то происходит такое-то действие.
как это правильно записать на plpgsql?
В SQL запросе такая конструкция c LIKE работает нормально, а вот в процедуре...
...
Рейтинг: 0 / 0
08.04.2008, 18:09
    #35243489
бухарь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
так и работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace function sravni()
returns float4 as
$$
declare
colr_name varchar( 32 ):='4554545У[ВДКШ]ghhhhgh';
result_price float4:= 0 ;
begin
	if (colr_name like '%У[ВДКШ]%') then
	result_price =result_price +  80 ;
	end if;
return result_price;
end;
$$
language 'plpgsql';

select sravni();

главное result_price инициализировать иначе нуль + 80 = нуль
...
Рейтинг: 0 / 0
08.04.2008, 18:23
    #35243528
Vintage2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
Если так сделать, то сообщение об ошибке возникает
: ERROR: syntax error at or near "NULL"

а если текст процедуры писать в одинарных кавычках, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace function sravni()
returns float4 as
'
declare
colr_name varchar(32):='4554545Ó[ÂÄÊØ]ghhhhgh';
result_price float4:=0;
begin
	if (colr_name like '%Ó[ÂÄÊØ]%') then
	result_price =result_price + 80;
	end if;
return result_price;
end;
'
language 'plpgsql';

то возникает то, что меня в самом начале смутило, а именно ошибка
Parameter ') then
result_price =result_price + 80' not found

з.ы. для выполнения запросов Я пользуюсь PG Explorer'ом, он по умолчанию в конструкторе процедур именно одинарные кавычки ставит, а поскольку я в ПостгреСКЛ начинающий, думал так и надо..
...
Рейтинг: 0 / 0
08.04.2008, 18:23
    #35243529
бухарь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
Vintage2Добрый день.
like '%У[ВДКШ]%'
т.е. если строка содержит букву "У" перед В, Д, К, или Ш, то происходит такое-то действие.


like так не работает
...
Рейтинг: 0 / 0
08.04.2008, 18:27
    #35243539
бухарь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
Vintage2Если так сделать, то сообщение об ошибке возникает
: ERROR: syntax error at or near "NULL"

а если текст процедуры писать в одинарных кавычках, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace function sravni()
returns float4 as
'
declare
colr_name varchar(32):='4554545Ó[ÂÄÊØ]ghhhhgh';
result_price float4:=0;
begin
	if (colr_name like '%Ó[ÂÄÊØ]%') then
	result_price =result_price + 80;
	end if;
return result_price;
end;
'
language 'plpgsql';

то возникает то, что меня в самом начале смутило, а именно ошибка
Parameter ') then
result_price =result_price + 80' not found

з.ы. для выполнения запросов Я пользуюсь PG Explorer'ом, он по умолчанию в конструкторе процедур именно одинарные кавычки ставит, а поскольку я в ПостгреСКЛ начинающий, думал так и надо..


с кодировкой чёто непорядке, мой пример работает, запускал в PgAdmin
...
Рейтинг: 0 / 0
08.04.2008, 18:27
    #35243541
Vintage2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
бухарь Vintage2Добрый день.
like '%У[ВДКШ]%'
т.е. если строка содержит букву "У" перед В, Д, К, или Ш, то происходит такое-то действие.


like так не работает

я это уже понял ))
как раз и хотелось бы узнать, какой есть оператор, чтоб в IF вернул true или false в зависимости от того, соответствует строка выражению или нет
...
Рейтинг: 0 / 0
08.04.2008, 18:32
    #35243555
бухарь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
это регекспы, вобщем надо LIKE заменить на SIMILAR TO (http://www.postgresql.org/docs/8.3/interactive/functions-matching.html)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace function sravni()
returns float4 as
$$
declare
colr_name varchar( 32 ):='oo__УД___';
result_price float4:= 0 ;
begin
	if (colr_name similar to '%У[ВДКШ]%') then
	result_price =result_price +  80 ;
	end if;
return result_price;
end;
$$
language 'plpgsql';

select sravni();

вот как тебе надо :))
...
Рейтинг: 0 / 0
08.04.2008, 18:41
    #35243583
Vintage2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение строки в хранимой процедуре
То что надо, спасибо!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сравнение строки в хранимой процедуре / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]