SQL Server OPENJSON ile Web’den Döviz Kurlarını İşleme

By | March 28, 2018

Selamlar,

Bugün SQL Server 2016 ile hayatımıza girmiş olan ( COMPATIBILITY_LEVEL = 130 ve üstü ) OPENJSON kullanarak bir web sitesinde yer alan json çıktısını nasıl işleyebilirizi ele alacağız.

İlk adım olarak Web sayfasındaki veriyi almamızı sağlayacak sql server function yazıyor olacağız fakat function içerisinde kullandığımız OLE objelerinden dolayı öncelikli olarak aşağıdaki kod bloğu ile SQL Server’da OLE objelerinin kullanıma açmamız gerekiyor.

sp_configure 'show advanced options',1
Reconfigure
go
sp_configure 'Ole Automation Procedures',1
reconfigure

OLE objelerini kullanıma açtığımıza göre aşağıdaki kod bloğu ile Web sayfasını okuyacağımız SQL Function yazalım.


create function dbo.GetWebPage( @WebPage varchar(max)='')

RETURNS varchar(max)

as

BEGIN

DECLARE @url VARCHAR(MAX),

@win INT,

@hr INT,

@Text VARCHAR(8000),

@RowID int,

@Status smallint,

@Accuracy tinyint

Set @url = @WebPage

EXEC @hr = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @win OUT

IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OAMethod @win, 'Open', NULL, 'GET', @url, 'false'

IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OAMethod @win, 'Send'

IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OAGetProperty @win, 'ResponseText', @Text OUT

IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr = sp_OADestroy @win

IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

return @Text

END

SQL Function da tamamlandığına göre Döviz değerlerini işleyeceğimiz tablomuzu oluşturalım.

create table DovizChangeHistory
(
ID int identity(1,1) primary key,
CurrencyName varchar(100),
Selling decimal(10,5),
Buying decimal(10,5),
Change_rate varchar(50),
InsertDate datetime not null default(getdate())
)

Nihayet son aşamaya geldik, bu aşamada ise hangi adresten veriyi çekeceğimizi bir değişken ile gösteriyoruz ve gelen değerin JSON formatında olup olmadığını kontrol edip uygunsa tabloya değerleri yazıyoruz. Yoksa ekrana uyarı veriyoruz.

declare @LinkUSD varchar(max) = 'https://www.doviz.com/api/v1/currencies/USD/latest'
declare @USD_Validate bit
declare @JSON varchar(max)
select @JSON= dbo.GetWebPage(@LinkUSD)
select @USD_Validate = ISJSON(@JSON)

if (@USD_Validate = 1)
BEGIN
insert into DovizChangeHistory(CurrencyName,Selling,Buying,Change_rate,InsertDate)
select
full_name as CurrencyName ,
selling as Selling,
buying as Buying,
change_rate Change_rate,
getdate() as InsertDate
from OPENJSON(@JSON)
WITH (
full_name varchar(100),
selling decimal(10,5),
buying decimal(10,5),
change_rate varchar(50)
)
END
else
BEGIN
select 'JSON Formatı Uygun değil!'
END

İşlemleri tamamladıktan sonra Tablomuzu kontrol ettiğimizde aşağıdaki gibi history durumu ile karşılaşabiliriz.

select * from DovizChangeHistory 

Bir yazımızın daha sonuna geldik, içeriği daha da geliştirebilmek adına isterseniz SQL Server Agent da JOB oluşturup son scripti kullanabilirsiniz . Sorunuz olursa buradayım!

0 thoughts on “SQL Server OPENJSON ile Web’den Döviz Kurlarını İşleme

  1. Halil İbrahim AYHAN

    Merhabalar Çağlar Bey,
    Mevcut Yapımız Üzerinde SQL Server 2014 Kullanılmaktadır, Anlatmış Olduğunuz Makale Üzerinde COMPATIBILITY_LEVEL 120 Olarak Nasıl Kullanabilirim ?
    Ayrıca Sadece USD Değil de Diğer Tüm Döviz Kurları İçin Nasıl Bir İşlem Yapabilirim ?
    Sizlerden Bilgi Beklemekteyim, İyi Çalışmalar…

    Reply
    1. Çağlar Özenç Post author

      Merhaba Halil İbrahim Bey,
      JSON Özelliğini kullanabilmeniz için SQL Server 2016 versiyonuna sahip olmanız gerekiyor. Bu sebepten kullandığınız SQL Server 2014’ü upgrade edecek olursanız bu özelliği kullanabilirsiniz. Compability level değiştirme işlemi için aşağıdaki syntaxı kullanabilirsiniz.

      alter database DBNAME set COMPATIBILITY_LEVEL = 130;

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *