BAĞLANTILARIM

Takip Edin:

0

SQL STORED PROCEDURE ve CURSOR KULLANIMI

Perşembe, Ağustos 03, 2017 / /



Aşağıdaki örnekte TeklifOlustur adında bir prosedür oluşturduk.

Prosedürün yapacağı iş, birkaç tablodan UNION ALL ile birleştirilerek alınmış sorgu sonucunu stored procedure içinde tanımlanmış @TABLO adında bir tabloya yazmak.

Daha sonra kursor adıyla tanımlanmış CURSOR vasıtasıyla bu tablo üzerinde satır satır dolaşarak SELECT, SUM gibi çeşitli işlemler yaptıktan sonra bulduğu bilgileri TEKLIF tablosuna eklemek.

USE [BOSFOR_WEB_YONETIM_FIDE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[TeklifOlustur]
AS

DECLARE @ILKTARIH NVARCHAR(100) = GETDATE() --güncel zaman
DECLARE @SONTARIH NVARCHAR(100) = DATEADD(yy,10,GETDATE()) --güncel zamana 10 yıl ekledik
 --procedure içinde kürsörde kullanmak üzere bir tablo tanımlıyoruz
DECLARE @TABLO TABLE
(
 FIRMA NVARCHAR(50),
 SIPARISNO NVARCHAR(50),
 EKIMNO NVARCHAR(50),
 FIDEADI NVARCHAR(250),
 VARYANT NVARCHAR(50),
 SEEDITEMREF NVARCHAR(50),
 TOHUMADI NVARCHAR(250),
 PLANLANANEKIMTARIHI NVARCHAR(50),
 TESLIMTARIHI NVARCHAR(50),
 SIPARISMIKTARI NVARCHAR(50),
 PLNMIKTAR INT,
 EKILENMIKTAR NVARCHAR(50),
 BEKLEYENMIKTAR NVARCHAR(50),
 TEKLIFMIKTARI NVARCHAR(50),
      KALANGUN NVARCHAR(250)
)
INSERT @TABLO
   
SELECT TMP2.*
FROM (
SELECT
TMP.*
,KALANGUN=(SELECT DATEDIFF(day, GETDATE(), PLANLANANEKIMTARIHI))
FROM (
SELECT * FROM FITAP.[dbo].[FF_220_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_230_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_240_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_250_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_260_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_270_TOHUMBILGI](@SONTARIH,@ILKTARIH)
) AS TMP
) AS TMP2
WHERE TOHUMADI IS NOT NULL
AND KALANGUN<=5
ORDER BY PLANLANANEKIMTARIHI

SELECT * FROM @TABLO

--CURSOR BAŞLIYOR
DECLARE @TOHUMAD NVARCHAR(250)
DECLARE @PLANLANANMIKTAR INT

DECLARE kursor CURSOR FOR
--TABLOYU GRUPLANDIRARAK ALDIK
SELECT TOHUMADI FROM @TABLO GROUP BY TOHUMADI
OPEN kursor
FETCH NEXT FROM kursor
INTO @TOHUMAD
WHILE @@FETCH_STATUS = 0
BEGIN

  --Burada TOHUMADI'na göre filtreleme yap ve PLNMIKTAR alanlarındaki veriyi toplayıp @PLANLANANMIKTAR değişkenine at
  --TOHUM ADINA GÖRE BAK
  SELECT @PLANLANANMIKTAR=SUM(PLNMIKTAR) FROM @TABLO WHERE TOHUMADI=@TOHUMAD
 
 --KAYIT EKLE
 INSERT INTO TEKLIF (TohumAd,KayitTarihi,Miktar) VALUES (@TOHUMAD,(SELECT GETDATE()),@PLANLANANMIKTAR)

FETCH NEXT FROM kursor INTO @TOHUMAD
END
CLOSE kursor
DEALLOCATE kursor

Bu prosedür otomatik olarak belirli aralıklarla çalışsın istenirse Sql Server'da Job oluşturulabilir.
http://blog.tameryigit.com/2017/08/sql-serverda-job-zamanlanmis-gorev.html

0 yorum

SON YORUMLAR