Меня нагнули работать с 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.
У кого какие мысли?