Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужен свежий взгляд / 7 сообщений из 7, страница 1 из 1
13.11.2016, 23:30
    #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
14.11.2016, 12:17
    #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
14.11.2016, 21:38
    #39347132
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен свежий взгляд
...
Рейтинг: 0 / 0
15.11.2016, 13:06
    #39347453
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен свежий взгляд
Ролг Хупин,

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

Предлагаете массивы?
Не очень удобно с ними возиться будет из джавы, например.
...
Рейтинг: 0 / 0
15.11.2016, 13:25
    #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
19.11.2016, 16:28
    #39350308
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен свежий взгляд
qwwq, Спасибо
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужен свежий взгляд / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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