Hi, многоуважаемый All!
Поддержите, плиз ... Или пошлите нафиг ;)
В контексте нововведений 2-ки, а именно default значений в параметрах SP.
Коим лично я безумно рад ...
Не было-бы логичным добавить указание какому параметру приходится тот
или иной аргумент ? Например:
CREATE PROCEDURE TEST(Param1 bigint = 0, Param2 varchar(32) = 'test', Param3
smallint = 1)
as begin /* */ end;
и возможности вызова вида:
1) select * from test;
2) select * from test(Param1 = 3, Param3 = 10);
3) select * from TEST(Param2 = 'Пример');
"Глубинный смысл" ясен помоему и ребёнку ...
1) Возможность не дублировать значения по умолчанию что-бы добраться
до "последнего" параметра
2) Лучьшая читабельность кода.
3) Лишняя возможность поймать глюк при поменяных местами параметрах
особенно однотипных ...
(последнее ИМХО очень актуально при default значениях)
Лично я бы все параметры передавал именно через указание
какому параметру какое значение нужно.
А то добавит некий умник параметр не в конец списка а в середдинку и
глюк обеспечен !!! Привожу простейший пример (споткнулся о него):
Была создана процедура (очень упрощённо) и благополучно забыта :)
create procedure SUB(id bigint, Suff varchar(32) = '')
returns (status varchar(128))
as begin
select status || :Suff
from vw_doc where id = :id
into :status;
end;
Мой напарник правит:
create procedure SUB(id bigint, Pref varchar(32) = '', Suff varchar(32) =
'')
returns (status varchar(128))
as begin
select :Pref || status || :Suff
from vw_doc where id = :id
into :status;
end;
Вроде всё логично, но ведь есть SP из которых вызывается эта SP !!!
Как думаете возникла ошибка при перекомпиляции ? Конечно нет !
Всё здорово, но этот противный глючёк ловился целый час :(
А сколько их ещё может быть ? Страшно подумать ...
PS: Конечно таким макаром можно вообще избавиться от жесткой
последовательности параметров, например написать
select * from test(Param3 = 3, Param1 = 10);
но имхо это сильно усложнит парсер и меня точно пошлют :)
С уважением,
Константин Григорьевич.
===============