sasha wrote:
Меня нагнули работать с MS SQL
Сочуйствую :)
1) Не знаю с какого бодуна писатели стандарта придумывали синтаксис
использования курсоров типа такого:
Без комментариев, ибо со стандартом в этом плане не знаком, но имею
серьёзные сумления, что в MS реализован именно стандарт, это не в их
обычае вообще-то.
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
Мсье про вызовы процедур из других процедур в курсах?
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
Думаю никому не надо объяснять почему второй вариант лучше.
Надо. Мне. Мне непонятно нахрен применять курсор, жрущий память,
когда нужен однонаправленый проход по резалтсету.
--
Regards. Ded.