eLVik

GetMainStockData

Dec 2nd, 2021
630
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. USE [ForestManagement]
  2. GO
  3. /****** Object:  StoredProcedure [dbo].[usp_GetMainStockAgeDataOnQuarter]    Script Date: 02.12.2021 14:56:01 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. -- ======================================================================
  10. -- ОПИСАНИЕ.
  11. -- Возвращает возрастные характеристики для главной породы на квартале.
  12.  
  13. -- ПАРАМЕТРЫ:
  14. -- @Quarter_OID       - идентификатор квартала.
  15. -- @NormativeData_OID - код набора НСИ
  16. -- @CuttingAgeKey     - ключ справочника установленных возрастов рубок.
  17. -- @ActualizationYear - год актуализации данных.
  18.  
  19. -- РЕЗУЛЬТИРУЮЩАЯ ВЫБОРКА:
  20. -- CommonData_OID     - идентификатор общей характеристики подвыдела.
  21. -- ReturnCode         - код результата выполнения ХП dbo.sp_GetMainStockAgeData
  22. -- MainStock_OID      - идентификатор главной породы
  23. -- AgeGroup_OID       - код возрастной группы
  24. -- CuttingAge         - нижний предел возраста рубки
  25. -- AgeClassDuration   - продолжительность класса возраста
  26. -- AgeClass           - класс возраста
  27. -- Age                - возраст
  28. -- InCalc             - признак средневозрастных насаждений, включенных в расчет
  29. -- IsExploitable      - признак эксплуатируемости
  30. -- MinAge             - минимальный возраст
  31. -- MaxAge             - максимальный возраст
  32. -- ======================================================================
  33. ALTER PROCEDURE [dbo].[usp_GetMainStockAgeDataOnQuarter]
  34.     @Quarter_OID int,
  35.     @NormativeData_OID smallint,
  36.     @CuttingAgeKey smallint,
  37.     @ActualizationYear smallint
  38. AS
  39. BEGIN
  40.     SET NOCOUNT ON;
  41.  
  42.     CREATE TABLE #t
  43.     (
  44.         CommonData_OID int NOT NULL,
  45.         Stratum_OID int,
  46.         ReturnCode int,
  47.         MainStock_OID smallint,
  48.         AgeGroup_OID smallint,
  49.         CuttingAge smallint,
  50.         AgeClassDuration smallint,
  51.         AgeClass smallint,
  52.         Age smallint,
  53.         InCalc bit,
  54.         IsExploitable bit,
  55.         MinAge smallint,
  56.         MaxAge smallint
  57.     )
  58.  
  59.     DECLARE @return_value int,
  60.             @MainStock_OID smallint,
  61.             @CuttingAge smallint,
  62.             @AgeClassDuration smallint,
  63.             @AgeGroup_OID smallint,
  64.             @Age smallint,
  65.             @AgeClass smallint,
  66.             @CommonData_OID int,
  67.             @oid int,
  68.             @InCalc bit,
  69.             @IsExploitable bit,
  70.             @Stratum_OID int,
  71.             @MinAge smallint,
  72.             @MaxAge smallint
  73.            
  74.  
  75.     DECLARE my_cursor CURSOR FORWARD_ONLY FAST_FORWARD FOR
  76.     SELECT a.OID FROM CommonData AS a INNER JOIN SubStratum AS b ON a.SubStratum_OID = b.OID INNER JOIN Stratum AS c ON b.Stratum_OID = c.OID
  77.     WHERE c.Quarter_OID = @Quarter_OID AND a.ActualizationYear = @ActualizationYear
  78.  
  79.     OPEN my_cursor
  80.  
  81.     FETCH NEXT FROM my_cursor INTO @CommonData_OID
  82.     WHILE @@FETCH_STATUS = 0
  83.     BEGIN
  84.         EXEC    @return_value = [dbo].[usp_GetMainStockAgeData]
  85.                 @CuttingAgeKey = @CuttingAgeKey,
  86.                 @NormativeData_OID = @NormativeData_OID,
  87.                 @CommonData_OID = @CommonData_OID,
  88.                 @MainStock_OID = @MainStock_OID OUTPUT,
  89.                 @CuttingAge = @CuttingAge OUTPUT,
  90.                 @AgeClassDuration = @AgeClassDuration OUTPUT,
  91.                 @AgeGroup_OID = @AgeGroup_OID OUTPUT,
  92.                 @Age = @Age OUTPUT,
  93.                 @AgeClass = @AgeClass OUTPUT,
  94.                 @MinAge = @MinAge OUTPUT,
  95.                 @MaxAge = @MaxAge OUTPUT
  96.                        
  97.         SET @InCalc = 0
  98.         SET @IsExploitable = 0
  99.  
  100.  SELECT @Stratum_OID = b.Stratum_OID
  101.     FROM CommonData AS a INNER JOIN SubStratum AS b ON a.SubStratum_OID = b.OID
  102.         WHERE a.OID = @CommonData_OID
  103.            
  104.         IF (@AgeGroup_OID = 2)
  105.         BEGIN
  106.             SELECT @oid = oid FROM CalculationAgeClasses
  107.             WHERE NormativeData_OID = @NormativeData_OID AND CuttingAge = @CuttingAge AND AgeClassDuration = @AgeClassDuration AND @Age >= MinAge AND @Age <= MaxAge
  108.  
  109.             IF (@@ROWCOUNT > 0)
  110.                 SET @InCalc = 1
  111.         END
  112.  
  113.         EXEC dbo.usp_CheckExploitable
  114.                 @NormativeData_OID = @NormativeData_OID,
  115.                 @CommonData_OID = @CommonData_OID,
  116.                 @ExploitableFlag = @IsExploitable OUTPUT
  117.    
  118.         INSERT INTO #t (CommonData_OID, Stratum_OID, ReturnCode, MainStock_OID, AgeGroup_OID, CuttingAge, AgeClassDuration, AgeClass, Age, InCalc, IsExploitable, MinAge, MaxAge)
  119.         VALUES (@CommonData_OID, @Stratum_OID, @return_value, @MainStock_OID, @AgeGroup_OID, @CuttingAge, @AgeClassDuration, @AgeClass, @Age, @InCalc, @IsExploitable, @MinAge, @MaxAge)
  120.         FETCH NEXT FROM my_cursor INTO @CommonData_OID
  121.     END -- WHILE
  122.  
  123.     CLOSE my_cursor
  124.     DEALLOCATE my_cursor
  125.  
  126.     SELECT * FROM #t
  127. END
  128.  
  129.  
RAW Paste Data