powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужен свежий взгляд
7 сообщений из 7, страница 1 из 1
Нужен свежий взгляд
    #39346536
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как можно сделать лучше

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
create or replace function public.rserr(
	p_user_id varchar
	,p_msg_code varchar
	,p_function_name varchar = null
	,p_param00 text = null
	,p_param01 text = null
	,p_param02 text = null
	,p_param03 text = null
	,p_param04 text = null )
returns void as
$$
declare
	v_msg varchar;
	v_qnt_filled_params int;
begin
	-- Получение сообщения из БД
	select get_msg_text(p_msg_code)
	into v_msg;

	-- Дефолтовое сообщение из БД
	if v_msg is null then
		v_msg := 'There is no message in sys_msg table with code = ' || coalesce(p_msg_code);
	end if;

	-- Подсчет параметров
	if (p_param04 is not null)
		and (p_param03 is not null)
		and (p_param02 is not null)
		and (p_param01 is not null)
		and (p_param00 is not null) then
		v_qnt_filled_params := 5;
	elsif (p_param03 is not null)
		and (p_param02 is not null)
		and (p_param01 is not null)
		and (p_param00 is not null) then
		v_qnt_filled_params := 4;
	elsif 	(p_param02 is not null)
		and (p_param01 is not null)
		and (p_param00 is not null) then
		v_qnt_filled_params := 3;
	elsif 	(p_param01 is not null)
		and (p_param00 is not null) then
		v_qnt_filled_params := 2;
	elsif 	(p_param00 is not null) then
		v_qnt_filled_params := 1;
	else
		v_qnt_filled_params := 0;
	end if;
	
	-- Генерация исключения
	if v_qnt_filled_params = 0 then
		raise exception '~~~%~~!', v_msg;
	elsif v_qnt_filled_params = 1 then
		raise exception '~~~% %~~!', v_msg, p_param00;
	elsif v_qnt_filled_params = 2 then
		raise exception '~~~% % %~~!', v_msg, p_param00, p_param01;
	elsif v_qnt_filled_params = 3 then
		raise exception '~~~% % % %~~!', v_msg, p_param00, p_param01, p_param02;
	elsif v_qnt_filled_params = 4 then
		raise exception '~~~% % % % %~~!', v_msg, p_param00, p_param01, p_param02, p_param03;
	elsif v_qnt_filled_params = 5 then
		raise exception '~~~% % % % % %~~!', v_msg, p_param00, p_param01, p_param02, p_param03, p_param04;
	end if;
end
$$
language plpgsql;
...
Рейтинг: 0 / 0
Нужен свежий взгляд
    #39346753
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.
Код: sql
1.
2.
3.
4.
5.
	-- Получение сообщения из БД
	v_msg:=get_msg_text(p_msg_code);
	-- Дефолтовое сообщение из БД
	v_msg:=coalesce(v_msg,'There is no message in sys_msg table with code = ' || coalesce(p_msg_code));
	end if;




2. Смысл сначала присваивать значение пременной, а затем его проверять?
Сделайте исключение сразу в первой проверке
...
Рейтинг: 0 / 0
Нужен свежий взгляд
    #39347132
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нужен свежий взгляд
    #39347453
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

2. Потому что результат выполнения функции неизвестен
...
Рейтинг: 0 / 0
Нужен свежий взгляд
    #39347456
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fteМожет сюда?:
36.4.5. SQL Functions with Variable Numbers of Arguments

Предлагаете массивы?
Не очень удобно с ними возиться будет из джавы, например.
...
Рейтинг: 0 / 0
Нужен свежий взгляд
    #39347488
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. Raven,

а что вас не устраивает ?



-- хотя вполне можно написать одну строку из
Код: sql
1.
concat('~~' ,(E'\t'||var_1),(E'\t'||var_2),.....,(E'\t'||var_N) )


https://www.postgresql.org/docs/9.6/static/functions-string.html
...
Рейтинг: 0 / 0
Нужен свежий взгляд
    #39350308
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, Спасибо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужен свежий взгляд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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