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.


Ответить