Advertisement
Guest User

Untitled

a guest
Feb 25th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 6.25 KB | None | 0 0
  1. PROCEDURE Import IS
  2.   fromTR NUMBER; -- poslední importovaná transakce
  3.   TrID   NUMBER; -- právě načítaná transakce
  4.   req    UTL_HTTP.REQ; --http request
  5.   resp   UTL_HTTP.RESP; --http response
  6.   zaznam VARCHAR2(32767); --načtený řádek z webu
  7.   cnt    NUMBER;
  8.   chyba  BOOLEAN;
  9.  BEGIN
  10.   cnt := 0; chyba := FALSE;
  11.   -- 0. Zjistit URL adresu Benefity.cz:
  12.   SELECT URL_BENEFITY_CZ INTO URL_BEN FROM BENKST;
  13.   -- 1. Zjistit, od kterého čísla čísla transakce chci začít importovat
  14.   SELECT MAX(ID_TRANSAKCE) INTO fromTR FROM BENEFITY_CZ_IMPORT;
  15.   fromTR := NVL(fromTR,-1); --normální by bylo dát 0, ale benefity.cz 0 neberou.
  16.   Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  17.                       'Spouštím algoritmus',
  18.                       NULL, 'I');
  19.   Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  20.                       'ID poslední načtené transakce je '||TO_CHAR(fromTR),
  21.                       NULL, 'U');
  22.   --
  23.   -- 2. Zadat request: Nastavení čísla transakce
  24.   --
  25.   -- Nastavit wallet pro ssl:
  26.   --UTL_HTTP.SET_WALLET('file:C:\tpca\_BEN\BEN_WALLETS',''); -- bez hesla, nastavit ve wallet autologin
  27.  
  28.   UTL_HTTP.SET_WALLET('file:/ora/db11g/home/wallet','Wall3t99'); -- s heslem, nastavit ve wallet autologin
  29.   UTL_HTTP.SET_TRANSFER_TIMEOUT (timeout => 300);
  30.   -- zadat http request
  31.   --      ( https://online.benefity.cz/export/ )
  32.   req := UTL_HTTP.BEGIN_REQUEST(
  33.           url => URL_BEN||'SetLastTransaction.php?transakce='||
  34.                   TO_CHAR(fromTR), METHOD => 'POST');
  35.   Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  36.                       'Request: '||req.url,
  37.                       NULL, 'U');
  38.   -- nastavit autentifikaci a charset
  39.   UTL_HTTP.SET_AUTHENTICATION(r => req, username => 'tpca', PASSWORD => 'online');
  40.   UTL_HTTP.SET_BODY_CHARSET(r => req, charset => 'WINDOWS-1250'); -- null ... použije se database default charset
  41.   -- obdržet odpověď
  42.   resp := UTL_HTTP.GET_RESPONSE(req);
  43.   BEGIN
  44.    -- přečíst řádek, měl by odpovědět "OK"
  45.    UTL_HTTP.READ_LINE(resp, zaznam, TRUE);
  46.    EXCEPTION WHEN UTL_HTTP.END_OF_BODY THEN zaznam := NULL;
  47.   END;
  48.   --dbms_output.put_line(zaznam);
  49.   UTL_HTTP.END_RESPONSE(r => resp);
  50.   IF zaznam = 'OK' THEN
  51.   Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  52.                       'Response: OK (očekávaná odpověď)',
  53.                       NULL, 'U');
  54.    --
  55.    -- 3. Zadat request: Načtení transakcí
  56.    --    (první řádek musí být: "Sending transactions...")
  57.    --
  58.    req := UTL_HTTP.BEGIN_REQUEST(
  59.            url => URL_BEN||'GetTransactions.php');--, method => 'POST');
  60.    Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  61.                        'Request: '||req.url,
  62.                        NULL, 'U');
  63.    -- nastavit autentifikaci a charset
  64.    UTL_HTTP.SET_AUTHENTICATION(r => req, username => 'tpca', PASSWORD => 'online');
  65.    UTL_HTTP.SET_BODY_CHARSET(r => req, charset => 'WINDOWS-1250'); -- null ... použije se database default charset
  66.    -- obdržet odpověd
  67.    resp := UTL_HTTP.GET_RESPONSE(req);
  68.    -- Příčíst první řádek
  69.    UTL_HTTP.READ_LINE(resp, zaznam, TRUE);
  70.    -- Měl by obsahovat 'Sending transactions ...'
  71.    IF zaznam = 'Sending transactions...' THEN
  72.     Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  73.                         'Response: Sending transactions... (očekávaná odpověď)',
  74.                         NULL, 'U');
  75.     cnt := 0;
  76.     Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  77.                         'Importuji záznamy ...',
  78.                         NULL, 'U');
  79.     LOOP
  80.      BEGIN
  81.       -- přečíst řádek
  82.       UTL_HTTP.READ_LINE(resp, zaznam, TRUE);
  83.       BEGIN
  84.       IF GetParam(zaznam,1,';') IS NULL OR
  85.          GetParam(zaznam,7,';') IS NULL OR
  86.          GetParam(zaznam,2,';') IS NULL OR
  87.          GetParam(zaznam,6,';') IS NULL OR
  88.          GetParam(zaznam,5,';') IS NULL OR
  89.          GetParam(zaznam,4,';') IS NULL THEN
  90.         chyba := TRUE;
  91.         Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  92.                             'Záznam obsahuje nepovolenou prázdnou hodnotu',
  93.                             zaznam, 'U');
  94.         EXIT;
  95.       ELSE
  96.        -- Zapiš načtený záznam do db:
  97.        BEGIN
  98.         INSERT INTO BENEFITY_CZ_IMPORT
  99.                (IMP_DAVKA,
  100.                 ID_TRANSAKCE,
  101.                 DATUM_TRANSAKCE,
  102.                 PID,
  103.                 CASTKA, POUZITO,
  104.                 KOEF_DAN_ZATEZE,
  105.                 SKUPINA_BENEFITU)
  106.          VALUES(BEN_ERROR_LOG_BATCH_SEQ.CURRVAL,
  107.                 TO_NUMBER(GetParam(zaznam,1,';')),
  108.                 TO_DATE(GetParam(zaznam,7,';'),'DD.MM.YYYY HH24:MI:SS'),
  109.                 DECODE(GetParam(zaznam,2,';'), 'UNKNOWN PID', 0,
  110.                        TO_NUMBER(GetParam(zaznam,2,';'))),
  111.                 -TO_NUMBER(GetParam(zaznam,6,';'),
  112.                            '999999999D99',
  113.                            'NLS_NUMERIC_CHARACTERS = ''.,'''), 'N',
  114.                 GetParam(zaznam,5,';'),
  115.                 GetParam(zaznam,4,';'));
  116.          TrID := TO_NUMBER(GetParam(zaznam,1,';'));
  117.        EXCEPTION WHEN OTHERS THEN
  118.         chyba := TRUE;
  119.         Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  120.                             'Chyba při zápisu záznamu do databáze. > '||zaznam,
  121.                             SQLERRM, 'U');
  122.         RAISE;
  123.        END;
  124.       END IF;
  125.       EXCEPTION WHEN OTHERS THEN
  126.         chyba := TRUE;
  127.         Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  128.                             'Záznam má špatný formát',
  129.                             zaznam, 'U');
  130.         EXIT;
  131.       END;
  132.       cnt := cnt + 1;
  133.       --dbms_output.put_line(zaznam);
  134.      EXCEPTION WHEN UTL_HTTP.END_OF_BODY THEN EXIT;
  135.      END;
  136.     END LOOP;
  137.    ELSE
  138.     chyba := TRUE;
  139.     Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  140.                         'Response: Neočekávaná odpověď',
  141.                         zaznam, 'U');
  142.    END IF;
  143.    UTL_HTTP.END_RESPONSE(r => resp);
  144.    IF cnt > 0 OR chyba THEN
  145.     Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  146.                         'Import ukončen, počet načtených záznamů je '||TO_CHAR(cnt)||
  147.                         ', poslední transakce = '||TO_CHAR(TrID),
  148.                         NULL, 'U');
  149.    ELSE
  150.     Ben_Error_Log_Write(NULL, NULL, NULL, 'D');
  151.     Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  152.                         'Žádná nová data',
  153.                         NULL, 'I');
  154.    END IF;
  155.   ELSE
  156.    chyba := TRUE;
  157.    Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  158.                        'Response: Neočekávaná odpověď',
  159.                         zaznam, 'U');
  160.   END IF;
  161.  EXCEPTION
  162.   WHEN OTHERS THEN
  163.     Ben_Error_Log_Write('BenefityCZ_PKG.Import',
  164.                         'Ukončeno předčasně s chybou',
  165.                         SQLERRM, 'U');
  166.     UTL_HTTP.END_RESPONSE(r => resp);
  167.  END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement