Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MS SQL ile Merkez Bankası Döviz Kurları Alma
#1
Selamlar

Daha önceden bir arkadaşın gösterdiği yol üzerinden biraz değişiklik yaparak merkez bankasından direkt döviz kurlarını sql üzerinden alan bir yapı kurmuştum
işe yarar diye paylaşayım dedim.

SQL Tarafında gereken ayarlamalar
Kod:
Use master
go
   sp_configure 'show advanced options' , 1
go
   Reconfigure with Override
go
   sp_configure 'Ole Automation Procedures' , 1
go
   Reconfigure with Override
Go

Test olark önce bir dabase oluşturun
Sonra aşağıdaki İlgili tablonun oluşturulması için gerekli kodu çalıştırın
Kod:
Use Test
go
-- Döviz Kurlarının Yazılacağı Tablo oluşturuluyor
   if not exists (select * from sys.tables where name = N'DOVIZKURLARI' and type = 'U')
   begin
       Create table DOVIZKURLARI (Tarih date,
                                  CrossOrder Smallint,
                                  Kod NVarchar(5),
                                  CurrencyCode NVarchar(5),
                                  UNIT  varchar(50),
                                  Isim varchar(100),
                                  CurrencyName varchar(100) ,
                                  ForexBuying float  ,
                                  ForexSelling float,
                                  BanknoteBuying float,
                                  BanknoteSelling float)
   end
Go

 Döviz Kurlarının Çekileceği Store Prosedure oluşturuluyor
Kod:
--  Döviz Kurlarının Çekileceği Store Prosedure oluşturuluyor
   if exists (select * from sys.objects where type = 'P' AND name = 'UPR_GetDovizKurlari_MerkezBankasi')
        drop procedure UPR_GetDovizKurlari_MerkezBankasi
go
   Create proc [dbo].[UPR_GetDovizKurlari_MerkezBankasi]
            (@pYil Smallint, @pAy TinyInt, @pGun TinyInt)
   As
   begin
       Declare @url as varchar(8000)
       /*
         Set @url = 'http://www.tcmb.gov.tr/kurlar/today.xml'
         Set @url = 'https://www.tcmb.gov.tr/kurlar/201903/12032019.xml'
       */

       Declare @XmlYilAy NVarchar(6), @XmlTarih NVarchar(10)
       Set @XmlYilAy =  Right('0000' + cast(@pYil as varchar(4)) , 4) + Right('00' + cast(@pAy as varchar(2)) , 2)
       Set @XmlTarih =  Right('00' + cast(@pGun as varchar(2)) , 2) + Right('00' + cast(@pAy as varchar(2)) , 2) + Right('0000' + cast(@pYil as varchar(4)) , 4)

       If DateFromParts(@pYil, @pAy, @pGun) = DateAdd(dd,0,DateDiff(dd,0,GetDate())) --gelen parametrelergünün tarihi ise
           Set @url =  'http://www.tcmb.gov.tr/kurlar/today.xml'
       else
           Set @url =  'http://www.tcmb.gov.tr/kurlar/' + @XmlYilAy + '/' + @XmlTarih + '.xml'
       Print @url

       declare @OBJ AS INT
       declare @RESULT AS INT
       EXEC @RESULT = SP_OACREATE 'MSXML2.XMLHTTP', @OBJ OUT
       EXEC @RESULT = SP_OAMethod @OBJ , 'open' , null , 'GET', @url, false
       EXEC @RESULT = SP_OAMethod @OBJ, send, NULL,''
       
        If OBJECT_ID('tempdb..#XML') IS NOT Null DROP TABLE #XML

       Create table #XML ( STRXML varchar(max))
       Insert INTO #XML(STRXML) EXEC @RESULT = SP_OAGetProperty @OBJ, 'responseXML.xml'
       
       --Select * From #XML

       DECLARE @XML AS XML
       SELECT @XML = STRXML FROM #XML
       DROP TABLE #XML
       DECLARE @HDOC AS INT
       EXEC SP_XML_PREPAREDOCUMENT @HDOC OUTPUT , @XML
       
       Delete from DOVIZKURLARI where tarih = DateFromParts(@pYil, @pAy, @pGun)
       INSERT INTO DOVIZKURLARI ( Tarih,CrossOrder,Kod,CurrencyCode,UNIT,Isim,CurrencyName,ForexBuying,ForexSelling,BanknoteBuying,BanknoteSelling)
 
       SELECT DateFromParts(@pYil, @pAy, @pGun) As Tarih,
              * FROM OPENXML(@HDOC, 'Tarih_Date/Currency')
                       With (CrossOrder NVarchar(5), Kod Varchar(5),  CurrencyCode NVarchar(5),
                             Unit varchar(50) 'Unit',
                             Isim varchar(100)   'Isim',
                             CurrencyName varchar(100)   'CurrencyName',
                             ForexBuying float   'ForexBuying',
                             ForexSelling float 'ForexSelling',
                             BanknoteBuying float 'BanknoteBuying',
                             BanknoteSelling float 'BanknoteSelling'
                           )
   End
Go

Kullanım şekli
Kod:
   -- Kullanımı
   Exec UPR_GetDovizKurlari_MerkezBankasi @pYil = 2019, -- smallint
                                          @pAy = 3,  -- tinyint
                                          @pGun = 13  -- tinyint
go

Sonuç
Kod:
   -- Sonucu
   select * from DOVIZKURLARI Where Tarih = DateFromParts(2019, 3, 13)
Go  
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
Merhabalar,

Paylaşımdan ve düşüncelerinizden dolayı teşekkür ederim.
Güzel bir örnek.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Store Procedure içinden hata alma Bay_Y 4 593 23-05-2018, Saat: 12:34
Son Yorum: Bay_Y
  Database'in Scriptini Alma. Mericx 9 1.618 07-03-2017, Saat: 16:30
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi