Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROCEDURE Import IS
- fromTR NUMBER; -- poslední importovaná transakce
- TrID NUMBER; -- právě načítaná transakce
- req UTL_HTTP.REQ; --http request
- resp UTL_HTTP.RESP; --http response
- zaznam VARCHAR2(32767); --načtený řádek z webu
- cnt NUMBER;
- chyba BOOLEAN;
- BEGIN
- cnt := 0; chyba := FALSE;
- -- 0. Zjistit URL adresu Benefity.cz:
- SELECT URL_BENEFITY_CZ INTO URL_BEN FROM BENKST;
- -- 1. Zjistit, od kterého čísla čísla transakce chci začít importovat
- SELECT MAX(ID_TRANSAKCE) INTO fromTR FROM BENEFITY_CZ_IMPORT;
- fromTR := NVL(fromTR,-1); --normální by bylo dát 0, ale benefity.cz 0 neberou.
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Spouštím algoritmus',
- NULL, 'I');
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'ID poslední načtené transakce je '||TO_CHAR(fromTR),
- NULL, 'U');
- --
- -- 2. Zadat request: Nastavení čísla transakce
- --
- -- Nastavit wallet pro ssl:
- --UTL_HTTP.SET_WALLET('file:C:\tpca\_BEN\BEN_WALLETS',''); -- bez hesla, nastavit ve wallet autologin
- UTL_HTTP.SET_WALLET('file:/ora/db11g/home/wallet','Wall3t99'); -- s heslem, nastavit ve wallet autologin
- UTL_HTTP.SET_TRANSFER_TIMEOUT (timeout => 300);
- -- zadat http request
- -- ( https://online.benefity.cz/export/ )
- req := UTL_HTTP.BEGIN_REQUEST(
- url => URL_BEN||'SetLastTransaction.php?transakce='||
- TO_CHAR(fromTR), METHOD => 'POST');
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Request: '||req.url,
- NULL, 'U');
- -- nastavit autentifikaci a charset
- UTL_HTTP.SET_AUTHENTICATION(r => req, username => 'tpca', PASSWORD => 'online');
- UTL_HTTP.SET_BODY_CHARSET(r => req, charset => 'WINDOWS-1250'); -- null ... použije se database default charset
- -- obdržet odpověď
- resp := UTL_HTTP.GET_RESPONSE(req);
- BEGIN
- -- přečíst řádek, měl by odpovědět "OK"
- UTL_HTTP.READ_LINE(resp, zaznam, TRUE);
- EXCEPTION WHEN UTL_HTTP.END_OF_BODY THEN zaznam := NULL;
- END;
- --dbms_output.put_line(zaznam);
- UTL_HTTP.END_RESPONSE(r => resp);
- IF zaznam = 'OK' THEN
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Response: OK (očekávaná odpověď)',
- NULL, 'U');
- --
- -- 3. Zadat request: Načtení transakcí
- -- (první řádek musí být: "Sending transactions...")
- --
- req := UTL_HTTP.BEGIN_REQUEST(
- url => URL_BEN||'GetTransactions.php');--, method => 'POST');
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Request: '||req.url,
- NULL, 'U');
- -- nastavit autentifikaci a charset
- UTL_HTTP.SET_AUTHENTICATION(r => req, username => 'tpca', PASSWORD => 'online');
- UTL_HTTP.SET_BODY_CHARSET(r => req, charset => 'WINDOWS-1250'); -- null ... použije se database default charset
- -- obdržet odpověd
- resp := UTL_HTTP.GET_RESPONSE(req);
- -- Příčíst první řádek
- UTL_HTTP.READ_LINE(resp, zaznam, TRUE);
- -- Měl by obsahovat 'Sending transactions ...'
- IF zaznam = 'Sending transactions...' THEN
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Response: Sending transactions... (očekávaná odpověď)',
- NULL, 'U');
- cnt := 0;
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Importuji záznamy ...',
- NULL, 'U');
- LOOP
- BEGIN
- -- přečíst řádek
- UTL_HTTP.READ_LINE(resp, zaznam, TRUE);
- BEGIN
- IF GetParam(zaznam,1,';') IS NULL OR
- GetParam(zaznam,7,';') IS NULL OR
- GetParam(zaznam,2,';') IS NULL OR
- GetParam(zaznam,6,';') IS NULL OR
- GetParam(zaznam,5,';') IS NULL OR
- GetParam(zaznam,4,';') IS NULL THEN
- chyba := TRUE;
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Záznam obsahuje nepovolenou prázdnou hodnotu',
- zaznam, 'U');
- EXIT;
- ELSE
- -- Zapiš načtený záznam do db:
- BEGIN
- INSERT INTO BENEFITY_CZ_IMPORT
- (IMP_DAVKA,
- ID_TRANSAKCE,
- DATUM_TRANSAKCE,
- PID,
- CASTKA, POUZITO,
- KOEF_DAN_ZATEZE,
- SKUPINA_BENEFITU)
- VALUES(BEN_ERROR_LOG_BATCH_SEQ.CURRVAL,
- TO_NUMBER(GetParam(zaznam,1,';')),
- TO_DATE(GetParam(zaznam,7,';'),'DD.MM.YYYY HH24:MI:SS'),
- DECODE(GetParam(zaznam,2,';'), 'UNKNOWN PID', 0,
- TO_NUMBER(GetParam(zaznam,2,';'))),
- -TO_NUMBER(GetParam(zaznam,6,';'),
- '999999999D99',
- 'NLS_NUMERIC_CHARACTERS = ''.,'''), 'N',
- GetParam(zaznam,5,';'),
- GetParam(zaznam,4,';'));
- TrID := TO_NUMBER(GetParam(zaznam,1,';'));
- EXCEPTION WHEN OTHERS THEN
- chyba := TRUE;
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Chyba při zápisu záznamu do databáze. > '||zaznam,
- SQLERRM, 'U');
- RAISE;
- END;
- END IF;
- EXCEPTION WHEN OTHERS THEN
- chyba := TRUE;
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Záznam má špatný formát',
- zaznam, 'U');
- EXIT;
- END;
- cnt := cnt + 1;
- --dbms_output.put_line(zaznam);
- EXCEPTION WHEN UTL_HTTP.END_OF_BODY THEN EXIT;
- END;
- END LOOP;
- ELSE
- chyba := TRUE;
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Response: Neočekávaná odpověď',
- zaznam, 'U');
- END IF;
- UTL_HTTP.END_RESPONSE(r => resp);
- IF cnt > 0 OR chyba THEN
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Import ukončen, počet načtených záznamů je '||TO_CHAR(cnt)||
- ', poslední transakce = '||TO_CHAR(TrID),
- NULL, 'U');
- ELSE
- Ben_Error_Log_Write(NULL, NULL, NULL, 'D');
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Žádná nová data',
- NULL, 'I');
- END IF;
- ELSE
- chyba := TRUE;
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Response: Neočekávaná odpověď',
- zaznam, 'U');
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- Ben_Error_Log_Write('BenefityCZ_PKG.Import',
- 'Ukončeno předčasně s chybou',
- SQLERRM, 'U');
- UTL_HTTP.END_RESPONSE(r => resp);
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement