Фтопку feature request.

CREATE PROCEDURE (SOME_ID INTEGER)
AS BEGIN
   FOR SELECT *
     FROM MY_TABLE
     WHERE ((:SOME_ID IS NULL) OR (ID = :SOME_ID))
     INTO ...
   DO
     /*ВСЁ ТОТ ЖЕ КОД, НО В ЕДИНСТВЕННОМ ЭКЗЕМПЛЯРЕ*/
   END
END

Этот код говорит о том что вам не доводилось озадачиваться вопросами оптимизации. Иными словами
1) это ужасное решение с точки зрения оптимизатора
2) а что если задача посложнее. Вот код, над которым я мыслю в данный момент (недописанный)

  IF(@WBSElementTypeId = 1) -- project
  BEGIN
    IF (@BrowsingMode = 0)
      -- tasks
      SET @CUR = CURSOR LOCAL FOR
SELECT Id FROM TasksData WHERE VersionId = @VersionId AND ParentTaskId = @WBSElementId;
    ELSE
      -- phases
      SET @CUR = CURSOR LOCAL FOR
        SELECT Id FROM PhasesData WHERE ProjectId = @WBSElementId;
  END
  ELSE IF(@WBSElementTypeId IN (2, 3, 4)) -- task
  BEGIN
    SET @CUR = CURSOR LOCAL FOR
SELECT Id FROM TasksData WHERE VersionId = @VersionId AND WBSElementId = @WBSElementId;
  END
  ELSE IF(@WBSElementTypeId = 5) -- phase
  BEGIN
IF EXISTS(SELECT Id FROM PhasesData WHERE ParentPhaseId = @WBSElementId)
      -- subphases
      SET @CUR = CURSOR LOCAL FOR
        SELECT Id FROM PhasesData WHERE ParentPhaseId = @WBSElementId;
    ELSE
      -- tasks
      SET @CUR = CURSOR LOCAL FOR
        SELECT Id FROM TasksData T
          WHERE VersionId = @VersionId AND PhaseId = @WBSElementId
            AND NOT EXISTS(SELECT 1 FROM TasksData PT
              WHERE PT.Id = T.ParentTaskId AND PT.PhaseId = @WBSElementId);
  END


Ответить