Фтопку 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