This discussion is archived
1 Reply Latest reply: Apr 24, 2013 10:48 PM by Marwim RSS

plsql concurrentcurrency

1005365 Newbie
Currently Being Moderated
I have a procedure like under the below and ı want to compile and run it in my database for getting concurrent currency but i do not know how can i modified it or am i have to modified this code for working.

PROCEDURE Set_Daily_Currencies IS
gelen_data_ UTL_HTTP.html_pieces;
alinan_sayfa_ NUMBER;
gelen_data_textclob_ CLOB;
--xml parse ile ilgili degiskenler
l_parser DBMS_XMLPARSER.parser;
l_doc DBMS_XMLDOM.domdocument;
l_nl DBMS_XMLDOM.domnodelist;
l_n DBMS_XMLDOM.domnode;
l_temp VARCHAR2 (1000);

TYPE tab_type IS TABLE OF par_currency_rates%ROWTYPE;

t_tab tab_type := tab_type ();
l_nodemap DBMS_XMLDOM.domnamednodemap;
l_attr_node DBMS_XMLDOM.domnode;
--xml parse ile ilgili degiskenler
valid_date_ DATE;
para_birimi_ VARCHAR2 (50);
para_birimi_alis_ VARCHAR2 (100);
para_birimi_satis_ VARCHAR2 (100);
para_birimi_ortalama_deger_ NUMBER;
ortalama_usd_deger_ NUMBER;
ortalama_euro_deger_ NUMBER;
ortalama_gbp_deger_ NUMBER;
BEGIN
--http://www.tcmb.gov.tr/kurlar/today.xml den gunluk doviz kurlari aliniyor
--http://www.tcmb.gov.tr/kurlar/today.xml den gunluk doviz kurlari aliniyor
gelen_data_ :=
UTL_HTTP.request_pieces ('http://www.tcmb.gov.tr/kurlar/today.xml',
100);

--dbms_output.put_line(gelen_data_.count || ' pieces were retrieved.');
--dbms_output.put_line('with total length ');
IF gelen_data_.COUNT < 1
THEN
DBMS_OUTPUT.put_line ('0');
ELSE
DBMS_OUTPUT.put_line ( (2000 * (gelen_data_.COUNT - 1))
+ LENGTH (gelen_data_ (gelen_data_.COUNT))
);
END IF;

--dbms_output.put_line(gelen_data_(1));
alinan_sayfa_ := 1;
gelen_data_textclob_ := NULL;

IF gelen_data_.COUNT > 0
THEN
LOOP
gelen_data_textclob_ :=
gelen_data_textclob_ || gelen_data_ (alinan_sayfa_);
alinan_sayfa_ := alinan_sayfa_ + 1;

--dbms_output.put_line('sayfa : '||alinan_sayfa_);
IF alinan_sayfa_ = gelen_data_.COUNT + 1
THEN
EXIT;
END IF;
END LOOP;
END IF;

--dbms_output.put_line(gelen_data_textClob_);
--http://www.tcmb.gov.tr/kurlar/today.xml den gunluk doviz kurlari aliniyor
--http://www.tcmb.gov.tr/kurlar/today.xml den gunluk doviz kurlari aliniyor


--Merkez bankasi XML inden doviz kurlarinin gecerlilik tarihi aliniyor..(valid_date_)
--Merkez bankasi XML inden doviz kurlarinin gecerlilik tarihi aliniyor..
-- Create a parser.
l_parser := DBMS_XMLPARSER.newparser;
-- Parse the document and create a new DOM document.
DBMS_XMLPARSER.parseclob (l_parser, gelen_data_textclob_);
l_doc := DBMS_XMLPARSER.getdocument (l_parser);
-- Free resources associated with the CLOB and Parser now they are no longer needed.
DBMS_LOB.freetemporary (gelen_data_textclob_);
DBMS_XMLPARSER.freeparser (l_parser);
-- Get a list of all the Tarih_Date nodes in the document using the XPATH syntax.
l_nl :=
DBMS_XSLPROCESSOR.selectnodes (DBMS_XMLDOM.makenode (l_doc),
'/Tarih_Date'
);
DBMS_OUTPUT.put_line (DBMS_XMLDOM.getlength (l_nl));
l_n := DBMS_XMLDOM.item (l_nl, 0);
--dbms_xslprocessor.valueOf(l_n,'Tarih/text()',gecici,null);
l_nodemap := DBMS_XMLDOM.getattributes (l_n);
l_attr_node := DBMS_XMLDOM.getnameditem (l_nodemap, 'Tarih');
valid_date_ :=
TO_DATE (DBMS_XMLDOM.getnodevalue (l_attr_node), 'DD.MM.YYYY');
DBMS_OUTPUT.put_line (valid_date_);
--Merkez bankasi XML inden doviz kurlarinin gecerlilik tarihi aliniyor..
--Merkez bankasi XML inden doviz kurlarinin gecerlilik tarihi aliniyor..


--Merkez bankasindan sadece usd,eur ve sterlin degerlerini aliyorum...
--Merkez bankasindan sadece usd,eur ve sterlin degerlerini aliyorum...
-- Get a list of all the Tarih_Date nodes in the document using the XPATH syntax.
l_nl :=
DBMS_XSLPROCESSOR.selectnodes (DBMS_XMLDOM.makenode (l_doc),
'/Tarih_Date/Currency'
);
DBMS_OUTPUT.put_line (DBMS_XMLDOM.getlength (l_nl));

-- Loop through the list and create a new record in a tble collection
-- for each EMP record.
FOR cur_dvz IN 0 .. DBMS_XMLDOM.getlength (l_nl) - 1
LOOP
l_n := DBMS_XMLDOM.item (l_nl, cur_dvz);
DBMS_XSLPROCESSOR.valueof (l_n, 'CurrencyName/text()', para_birimi_);

dbms_output.put_line('para_birimi : '||para_birimi_); tum para birimleri yaziyor
IF para_birimi_ IN ('US DOLLAR', 'EURO', 'POUND STERLING')
THEN
-- Use XPATH syntax to assign values to he elements of the collection.
-- 1 (TL) 2 (GBP) 3 (EURO) 4 (USD)
IF para_birimi_ = 'US DOLLAR'
THEN
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '4';
t_tab (t_tab.LAST).currency_to := '1';
END IF;

IF para_birimi_ = 'EURO'
THEN
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '3';
t_tab (t_tab.LAST).currency_to := '1';
END IF;

IF para_birimi_ = 'POUND STERLING'
THEN
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '2';
t_tab (t_tab.LAST).currency_to := '1';
END IF;

DBMS_XSLPROCESSOR.valueof (l_n,
'ForexBuying/text()',
para_birimi_alis_
);
DBMS_XSLPROCESSOR.valueof (l_n,
'ForexSelling/text()',
para_birimi_satis_
);
para_birimi_ortalama_deger_ :=
( TO_NUMBER (para_birimi_alis_, '999999999.9999')
+ TO_NUMBER (para_birimi_satis_, '999999999.9999')
)
/ 2;
t_tab (t_tab.LAST).VALUE := para_birimi_ortalama_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;

--BU DEGISKENLER CAPRAZ KURLAR ICIN KULLANILACAK
--HER DEGER TL KARSILIGINI IFADE EDIYOR
IF para_birimi_ = 'US DOLLAR'
THEN
ortalama_usd_deger_ := para_birimi_ortalama_deger_;
END IF;

IF para_birimi_ = 'EURO'
THEN
ortalama_euro_deger_ := para_birimi_ortalama_deger_;
END IF;

IF para_birimi_ = 'POUND STERLING'
THEN
ortalama_gbp_deger_ := para_birimi_ortalama_deger_;
END IF;
--BU DEGISKENLER CAPRAZ KURLAR ICIN KULLANILACAK
--HER DEGER TL KARSILIGINI IFADE EDIYOR
END IF;
END LOOP;

--Merkez bankasindan sadece usd,eur ve sterlin degerlerini aliyorum...
--Merkez bankasindan sadece usd,eur ve sterlin degerlerini aliyorum...


--Capraz kurlar gecici t_tab dizi tablosuna ekleniyor
--Capraz kurlar gecici t_tab dizi tablosuna ekleniyor
-- 1 (TL) 2 (GBP) 3 (EURO) 4 (USD)
--TL to GBP
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '1';
t_tab (t_tab.LAST).currency_to := '2';
t_tab (t_tab.LAST).VALUE := 1 / ortalama_gbp_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--TL to GBP
--TL to EUR
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '1';
t_tab (t_tab.LAST).currency_to := '3';
t_tab (t_tab.LAST).VALUE := 1 / ortalama_euro_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--TL to EUR
--TL to USD
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '1';
t_tab (t_tab.LAST).currency_to := '4';
t_tab (t_tab.LAST).VALUE := 1 / ortalama_usd_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--TL to USD
-- 1 (TL) 2 (GBP) 3 (EURO) 4 (USD)
--GBP to EURO
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '2';
t_tab (t_tab.LAST).currency_to := '3';
t_tab (t_tab.LAST).VALUE := ortalama_gbp_deger_ / ortalama_euro_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--GBP to EURO
--GBP to USD
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '2';
t_tab (t_tab.LAST).currency_to := '4';
t_tab (t_tab.LAST).VALUE := ortalama_gbp_deger_ / ortalama_usd_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--GBP to USD
-- 1 (TL) 2 (GBP) 3 (EURO) 4 (USD)
--EURO to GBP
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '3';
t_tab (t_tab.LAST).currency_to := '2';
t_tab (t_tab.LAST).VALUE := ortalama_euro_deger_ / ortalama_gbp_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--EURO to GBP
--EURO to USD
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '3';
t_tab (t_tab.LAST).currency_to := '4';
t_tab (t_tab.LAST).VALUE := ortalama_euro_deger_ / ortalama_usd_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--EURO to USD
-- 1 (TL) 2 (GBP) 3 (EURO) 4 (USD)
--USD to GBP
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '4';
t_tab (t_tab.LAST).currency_to := '2';
t_tab (t_tab.LAST).VALUE := ortalama_usd_deger_ / ortalama_gbp_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;
--USD to GBP
--USD to EURO
t_tab.EXTEND;
t_tab (t_tab.LAST).currency_from := '4';
t_tab (t_tab.LAST).currency_to := '3';
t_tab (t_tab.LAST).VALUE := ortalama_usd_deger_ / ortalama_euro_deger_;
t_tab (t_tab.LAST).valid_date := valid_date_;

--USD to EURO
--Capraz kurlar gecici t_tab dizi tablosuna ekleniyor
--Capraz kurlar gecici t_tab dizi tablosuna ekleniyor


--Hazirlanan DATA , PAR_CURRENCY_RATES tablosuna insert ediliyor
--Hazirlanan DATA , PAR_CURRENCY_RATES tablosuna insert ediliyor
--Eger valid date i ayni gun olan kayit varsa temizleniyor...
DELETE FROM par_currency_rates
WHERE valid_date = valid_date_;
--Eger valid date i ayni gun olan kayit varsa temizleniyor...
--Guncel data insert inden Insert ten once eski valid kayitlar invalid ediliyor.
UPDATE par_currency_rates set is_valid = 0 where is_valid = 1;

FOR cur_row IN t_tab.FIRST .. t_tab.LAST
LOOP
INSERT INTO par_currency_rates
(currency_from,
currency_to, VALUE,
valid_date,
is_valid
)
VALUES (t_tab (cur_row).currency_from,
t_tab (cur_row).currency_to, t_tab (cur_row).VALUE,
t_tab (cur_row).valid_date,
1
);
END LOOP;
--Hazirlanan DATA , PAR_CURRENCY_RATES tablosuna insert ediliyor
--Hazirlanan DATA , PAR_CURRENCY_RATES tablosuna insert ediliyor
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
--err_num := SQLCODE;
--err_msg := SUBSTR(SQLERRM, 1, 100);
DBMS_OUTPUT.put_line ( 'Error Number: '
|| SQLCODE
|| 'Error Message:'
|| SUBSTR (SQLERRM, 1, 100)
);
DBMS_LOB.freetemporary (gelen_data_textclob_);
DBMS_XMLPARSER.freeparser (l_parser);
DBMS_XMLDOM.freedocument (l_doc);
ROLLBACK;
END Set_Daily_Currencies;

Edited by: 1002362 on 24.Nis.2013 22:54
  • 1. Re: plsql concurrentcurrency
    Marwim Expert
    Currently Being Moderated
    Hello,

    welcome to the forum.

    This is the forum for the tool {forum:id=260}.
    Please mark this question as answered (so others know that they can ignore it) and post again in {forum:id=75}.

    Before posting you might want to read {message:id=9360002} especially about how to format your code and about necessary informations like db version.

    Regards
    Marcus

    Edited by: Marwim on 25.04.2013 07:47

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points