PLSQL ile TCMB Kur Bilgilerini Almak

PLSQL ile TCMB Kur Bilgilerini Almak:

Bu örnekte XML dökümandan EXTRACTVALUE fonksiyonu ile veri okuyarak kur tablomuza kayıt ekleyeceğiz.Bu PLSQL bloğunu bir PROCEDURE yapıp günde bir kere çalıştırarak otomatik hale getirebilirsiniz.(job) Ben sadece USD,EUR,GBP dövizlerini aldım.kendinize göre uyarlayabilirsiniz.Kuru alacağımız xml adresi : http://www.tcmb.gov.tr/kurlar/today.xml

–Kurları atmak için tablo yaratalım.
CREATE TABLE GUNLUK_KUR_TAB(
tarih DATE,
doviz VARCHAR2(3),
alis NUMBER,
satis NUMBER,
efektif_alis NUMBER,
efektif_satis NUMBER);

–Kur bilgilerini aşağıdaki block ile alalım.

DECLARE
l_url httpuritype;
l_xml xmltype;
BEGIN
l_url := httpuritype.createuri(‘http://www.tcmb.gov.tr/kurlar/today.xml’);
l_xml := l_url.getxml();
FOR rec_ IN ( SELECT
EXTRACTVALUE(VALUE(x), ‘/Tarih_Date/@Tarih’) tarih,
EXTRACTVALUE(VALUE(p), ‘/Currency/@CurrencyCode’) currency_code,
EXTRACTVALUE(VALUE(p), ‘/Currency/Unit’) unit,
EXTRACTVALUE(VALUE(p), ‘/Currency/ForexBuying’) alis,
EXTRACTVALUE(VALUE(p), ‘/Currency/ForexSelling’) satis,
EXTRACTVALUE(VALUE(p), ‘/Currency/BanknoteBuying’) e_alis,
EXTRACTVALUE(VALUE(p), ‘/Currency/BanknoteSelling’) e_satis
FROM TABLE(XMLSEQUENCE(EXTRACT(l_xml, ‘/Tarih_Date’))) x,
TABLE(XMLSEQUENCE(EXTRACT(VALUE(x), ‘/Tarih_Date/Currency’))) p
WHERE EXTRACTVALUE(VALUE(p), ‘/Currency/ForexSelling’) IS NOT NULL
AND EXTRACTVALUE(VALUE(p), ‘/Currency/@CurrencyCode’) IN (‘USD’,’EUR’,’GBP’)
) LOOP
— kur tablomuza insert edelim.
INSERT INTO GUNLUK_KUR_TAB VALUES(
trunc(SYSDATE),rec_.currency_code,rec_.alis,
rec_.satis,rec_.e_alis,rec_.e_satis);
— dbms_output ile ekrana bastıralım bilgi amaçlı..
dbms_output.put_line(‘Tarih:’||rec_.tarih ||’ ‘||’ Döviz:’||rec_.currency_code||
‘ Alış:’||rec_.alis||’ Satış:’||rec_.satis||’ Efek. Alış:’||rec_.e_alis||’ Efek. Satış:’||rec_.e_satis );
END LOOP;
END;

–Kur bilgilerini PLSQL’de kullanmak için bir de fonksiyon yaratalım.

CREATE OR REPLACE FUNCTION Get_Curr_Rate(
tarih_ DATE,
doviz_ VARCHAR2
) RETURN NUMBER
IS
CURSOR get_curr_ IS
SELECT m.alis
FROM GUNLUK_KUR_TAB m
WHERE tarih=tarih_
AND doviz=doviz_;
temp_ NUMBER;
BEGIN
OPEN get_curr_;
FETCH get_curr_ INTO temp_;
CLOSE get_curr_;
RETURN temp_;
END Get_Curr_Rate;

–Get_Curr_Rate fonksiyonun kullanımı

SQL> SELECT  sysdate tarih, Get_Curr_Rate(trunc(sysdate),’USD’) kur_usd FROM dual; — bugünün kuru
SQL> SELECT  sysdate-10 tarih, Get_Curr_Rate(trunc(sysdate-10),’USD’) kur_usd FROM dual; — 10 gün oncenin kuru 

 

Tagged: , , , ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir