powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сравнение строки в хранимой процедуре
8 сообщений из 8, страница 1 из 1
Сравнение строки в хранимой процедуре
    #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
Сравнение строки в хранимой процедуре
    #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
Сравнение строки в хранимой процедуре
    #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
Сравнение строки в хранимой процедуре
    #35243529
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vintage2Добрый день.
like '%У[ВДКШ]%'
т.е. если строка содержит букву "У" перед В, Д, К, или Ш, то происходит такое-то действие.


like так не работает
...
Рейтинг: 0 / 0
Сравнение строки в хранимой процедуре
    #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
Сравнение строки в хранимой процедуре
    #35243541
Vintage2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бухарь Vintage2Добрый день.
like '%У[ВДКШ]%'
т.е. если строка содержит букву "У" перед В, Д, К, или Ш, то происходит такое-то действие.


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

я это уже понял ))
как раз и хотелось бы узнать, какой есть оператор, чтоб в IF вернул true или false в зависимости от того, соответствует строка выражению или нет
...
Рейтинг: 0 / 0
Сравнение строки в хранимой процедуре
    #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
Сравнение строки в хранимой процедуре
    #35243583
Vintage2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То что надо, спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сравнение строки в хранимой процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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