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);
    но имхо это сильно усложнит парсер и меня точно пошлют :)
    
С уважением,
Константин Григорьевич.
===============


Ответить