Меня нагнули работать с MS SQL, я тут злюсь, матюкаюсь, провожу аналогии с FB и кое-какие мысли появляются.

1) Не знаю с какого бодуна писатели стандарта придумывали синтаксис использования курсоров типа такого:

DECLARE CUR CURSOR ...

OPEN CUR;

WHILE (1 = 1) DO
BEGIN
  IF (ROW_COUNT = 0)
    BREAK;

  FETCH CUR INTO ...;
END

CLOSE CUR;

В MSSQL ещё DEALLOCATE надо писать, что после FOR SELECT мне кажется идиотизмом. Так вот, предлагаю в Future request занести синтаксис типа:

DECLARE CUR CURSOR ...

FOR FETCH CUR INTO ... DO
BEGIN
END


Чтобы этот цикл делал сам OPEN, CLOSE и проверку ROW_COUNT, потому что писать как в первом случае оооооочень крайне мега неудобно.


2) Я думаю почти всем доводилось писать процедуры, в которых надо управлять частями запроса в зависимости от входных данных:

CREATE PROCEDURE (SOME_ID INTEGER)
AS
BEGIN
  IF (SOME_ID IS NULL)
    FOR SELECT * FROM MY_TABLE DO
    BEGIN
      <КОД>
    END
  ELSE // IF (SOME_ID IS NOT NULL)
    FOR SELECT * FROM MY_TABLE WHERE ID = :SOME_ID DO
    BEGIN
      <ТОТ ЖЕ САМЫЙ КОД>
    END
END

Несмотря на всю мою неприязнь к MSSQL там есть полезные фичи, в частности курсорные переменные. Приведенную выше процедуру можно переписать так (предположим что синтаксис 1 уже есть :-) ):

CREATE PROCEDURE (SOME_ID INTEGER)
AS
  DECLARE CURSOR CUR;
BEGIN
  IF (SOME_ID IS NULL)
    CUR = CURSOR FOR SELECT * FROM MY_TABLE;
  ELSE // IF (SOME_ID IS NOT NULL)
    CUR = CURSOR FOR SELECT * FROM MY_TABLE WHERE ID = :SOME_ID;

  <ВСЁ ТОТ ЖЕ КОД, НО В ЕДИНСТВЕННОМ ЭКЗЕМПЛЯРЕ>
END

Думаю никому не надо объяснять почему второй вариант лучше.


Собственно моё предложение: обсудить эти фичи и внести FEATURE REQUEST. У кого какие мысли?

Ответить