Advertisement
blackpab

Funckje

Jun 6th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 27.71 KB | None | 0 0
  1. /* #########################    KLIENCI    ######################### */
  2.  
  3. CREATE OR REPLACE PACKAGE PKLIENT IS
  4.   FUNCTION SELECTKLIENCI RETURN SYS_REFCURSOR;
  5.   FUNCTION SELECTKLIENCIKONTOID (IDKONTO INT) RETURN SYS_REFCURSOR;
  6.   PROCEDURE DELETEKONTO (KON_ID IN INT);
  7. END;
  8. /
  9. CREATE OR REPLACE PACKAGE BODY PKLIENT IS
  10.   -- POKAZ WSYZSTKICH KLIENTOW
  11.     FUNCTION SELECTKLIENCI
  12.     RETURN SYS_REFCURSOR
  13.   AS
  14.     MY_CURSOR SYS_REFCURSOR;
  15.     MY_QUERY VARCHAR2(500);
  16.   BEGIN
  17.  
  18.     MY_QUERY := q'[SELECT DISTINCT K.KONTO_ID ,K.IMIE, K. NAZWISKO, K.UPRAWNIENIA, A.MIEJSCOWOSC, A.WOJEWODZTWO ,A.KOD_POCZTOWY, A.ULICA, A.NR_DOMU, A.NR_LOKALU, KT.EMAIL, KT.NR_TEL FROM KONTO K, PRACOWNIK P, ADRES A, KONTAKT KT WHERE A.ADRES_ID = K.ADRES_ID AND K.UPRAWNIENIA = 'klient' AND KT.KONTAKT_ID = K.KONTAKT_ID]';
  19.  
  20.     OPEN MY_CURSOR FOR MY_QUERY;
  21.  
  22.     RETURN MY_CURSOR;
  23.   END SELECTKLIENCI;
  24.    
  25.   -- POKAZ DANE KLIENTA PO ID
  26.   FUNCTION SELECTKLIENCIKONTOID (IDKONTO INT)
  27.     RETURN SYS_REFCURSOR
  28.   AS
  29.     MY_CURSOR SYS_REFCURSOR;
  30.     MY_QUERY VARCHAR2(500);
  31.   BEGIN
  32.  
  33.     MY_QUERY := q'[SELECT DISTINCT K.KONTO_ID ,K.IMIE, K. NAZWISKO, K.UPRAWNIENIA, A.MIEJSCOWOSC, A.WOJEWODZTWO ,A.KOD_POCZTOWY, A.ULICA, A.NR_DOMU, A.NR_LOKALU, KT.EMAIL, KT.NR_TEL FROM KONTO K, PRACOWNIK P, ADRES A, KONTAKT KT WHERE A.ADRES_ID = K.ADRES_ID AND K.UPRAWNIENIA = 'klient' AND KT.KONTAKT_ID = K.KONTAKT_ID AND K.KONTO_ID=]' || IDKONTO;
  34.  
  35.     OPEN MY_CURSOR FOR MY_QUERY;
  36.  
  37.     RETURN MY_CURSOR;
  38.   END SELECTKLIENCIKONTOID;
  39.  
  40.   -- USUN KONTO O ZADANYM ID
  41.   PROCEDURE DELETEKONTO
  42.   (KON_ID IN INT)
  43.   AS
  44.   BEGIN
  45.     DELETE FROM KONTO
  46.     WHERE KONTO_ID = KON_ID;
  47.   END DELETEKONTO;
  48. END;
  49. /
  50.  
  51.  
  52.  
  53. /* #########################    PRACOWNICY    ######################### */
  54.  
  55. CREATE OR REPLACE PACKAGE PPRACOWNIK IS
  56.   FUNCTION SELECTPRACOWNICY RETURN SYS_REFCURSOR;
  57.   FUNCTION SELECTPRACOWNIKKONTOID (IDKONTO INT) RETURN SYS_REFCURSOR;
  58.   PROCEDURE INSERTPRACOWNIK (KON_ID IN INT, PEN IN FLOAT, PREM IN FLOAT);  
  59. END;
  60. /
  61. CREATE OR REPLACE PACKAGE BODY PPRACOWNIK IS
  62.     -- POKAZ WSZYSTKICH PRACOWNIKOW
  63.   FUNCTION SELECTPRACOWNICY
  64.     RETURN SYS_REFCURSOR
  65.   AS
  66.     MY_CURSOR SYS_REFCURSOR;
  67.     MY_QUERY VARCHAR2(500);
  68.   BEGIN
  69.  
  70.     MY_QUERY := 'SELECT K.KONTO_ID ,K.IMIE, K.NAZWISKO, K.UPRAWNIENIA, P.DATA_ZATRUDNIENIA, P.DATA_ZWOLNIENIA, P.PENSJA, P.PREMIA, A.MIEJSCOWOSC, A.WOJEWODZTWO ,A.KOD_POCZTOWY, A.ULICA, A.NR_DOMU, A.NR_LOKALU, KT.EMAIL, KT.NR_TEL FROM KONTO K, PRACOWNIK P, ADRES A, KONTAKT KT WHERE K.KONTO_ID = P.KONTO_ID AND A.ADRES_ID = K.ADRES_ID AND KT.KONTAKT_ID = K.KONTAKT_ID';
  71.  
  72.     OPEN MY_CURSOR FOR MY_QUERY;
  73.  
  74.     RETURN MY_CURSOR;
  75.   END SELECTPRACOWNICY;
  76.  
  77.   -- POKAZ DANE PRACOWNIKA PO ID
  78.   FUNCTION SELECTPRACOWNIKKONTOID(IDKONTO INT)
  79.     RETURN SYS_REFCURSOR
  80.   AS
  81.     MY_CURSOR SYS_REFCURSOR;
  82.     MY_QUERY VARCHAR2(500);
  83.   BEGIN
  84.  
  85.     MY_QUERY := q'[SELECT DISTINCT K.KONTO_ID ,K.IMIE, K. NAZWISKO, K.UPRAWNIENIA, A.MIEJSCOWOSC, A.WOJEWODZTWO ,A.KOD_POCZTOWY, A.ULICA, A.NR_DOMU, A.NR_LOKALU, KT.EMAIL, KT.NR_TEL FROM KONTO K, PRACOWNIK P, ADRES A, KONTAKT KT WHERE A.ADRES_ID = K.ADRES_ID AND K.UPRAWNIENIA = 'pracownik' AND KT.KONTAKT_ID = K.KONTAKT_ID AND K.KONTO_ID=]' || IDKONTO;
  86.  
  87.     OPEN MY_CURSOR FOR MY_QUERY;
  88.  
  89.     RETURN MY_CURSOR;
  90.   END SELECTPRACOWNIKKONTOID;
  91.  
  92.   -- DODAJ PRACOWNIKA
  93.   -- Trigger zmienia automatycznie uprawnienia
  94.   PROCEDURE INSERTPRACOWNIK
  95.          (
  96.           KON_ID IN INT,
  97.           PEN IN FLOAT,
  98.           PREM IN FLOAT                
  99.          )
  100.   AS
  101.   BEGIN
  102.       INSERT INTO PRACOWNIK(KONTO_ID, PENSJA, PREMIA) VALUES (KON_ID, PEN, PREM);
  103.  
  104.   END INSERTPRACOWNIK;
  105. END;
  106. /
  107.  
  108.  
  109.  
  110. /* #########################    KURIERZY    ######################### */
  111.  
  112. CREATE OR REPLACE PACKAGE PKURIER IS
  113.   FUNCTION SELECTKURIERZY RETURN SYS_REFCURSOR;
  114.   FUNCTION SELECTKURIERID (KURIER_ID INT) RETURN SYS_REFCURSOR;
  115.   PROCEDURE INSERTKURIER (NAZ_FIRMY IN VARCHAR2);  
  116.   PROCEDURE DELETEKURIER (KON_ID IN INT);
  117. END;
  118. /
  119. CREATE OR REPLACE PACKAGE BODY PKURIER IS
  120.    -- POKAZ WSYZSTKICH KURIEROW
  121.   FUNCTION SELECTKURIERZY
  122.     RETURN SYS_REFCURSOR
  123.   AS
  124.     MY_CURSOR SYS_REFCURSOR;
  125.     MY_QUERY VARCHAR2(500);
  126.   BEGIN
  127.  
  128.     MY_QUERY := 'SELECT * FROM KURIER';
  129.  
  130.     OPEN MY_CURSOR FOR MY_QUERY;
  131.  
  132.     RETURN MY_CURSOR;
  133.   END SELECTKURIERZY;
  134.  
  135.   -- POKAZ KURIER PO ID
  136.   FUNCTION SELECTKURIERID(KURIER_ID INT)
  137.     RETURN SYS_REFCURSOR
  138.   AS
  139.     MY_CURSOR SYS_REFCURSOR;
  140.     MY_QUERY VARCHAR2(500);
  141.   BEGIN
  142.  
  143.     MY_QUERY := 'SELECT * FROM KURIER WHERE KURIER_ID = ' || KURIER_ID;
  144.  
  145.     OPEN MY_CURSOR FOR MY_QUERY;
  146.  
  147.     RETURN MY_CURSOR;
  148.   END SELECTKURIERID;
  149.  
  150.   -- DODAJ KURIERA
  151.   PROCEDURE INSERTKURIER(NAZ_FIRMY IN VARCHAR2)
  152.   AS
  153.   BEGIN
  154.  
  155.       INSERT INTO KURIER(NAZWA_FIRMY) VALUES (NAZ_FIRMY);
  156.  
  157.   END INSERTKURIER;
  158.  
  159.   -- USUN KURIERA O ID
  160.   PROCEDURE DELETEKURIER
  161.   (KON_ID IN INT)
  162.   AS
  163.   BEGIN
  164.     DELETE FROM KURIER
  165.     WHERE KURIER_ID = KON_ID;
  166.   END DELETEKURIER;
  167. END;
  168. /
  169.  
  170.  
  171.  
  172. /* #########################    DOSTAWCY    ######################### */
  173.  
  174. CREATE OR REPLACE PACKAGE PDOSTAWCA IS
  175.   FUNCTION SELECTDOSTAWCA RETURN SYS_REFCURSOR;
  176.   FUNCTION SELECTDOSTAWCAID (DOSTAW_ID INT) RETURN SYS_REFCURSOR;
  177.   PROCEDURE INSERTDOSTAWCA (NAZWA_FIR IN VARCHAR2, MIEJSC IN VARCHAR2, WOJ IN VARCHAR2, KOD_POCZT IN VARCHAR2, UL IN VARCHAR2, NR_DOM IN INT, NR_LOK IN INT, MAIL IN VARCHAR2, TEL IN VARCHAR2, FAX_1 IN VARCHAR2, WWW_1 IN VARCHAR2);
  178.   PROCEDURE DELETEDOSTAWCA (KON_ID IN INT);
  179. END;
  180. /
  181. CREATE OR REPLACE PACKAGE BODY PDOSTAWCA IS
  182.    -- POKAZ WSZYSTKICH DOSTAWCOW
  183.   FUNCTION SELECTDOSTAWCA
  184.     RETURN SYS_REFCURSOR
  185.   AS
  186.     MY_CURSOR SYS_REFCURSOR;
  187.     MY_QUERY VARCHAR2(500);
  188.   BEGIN
  189.  
  190.     MY_QUERY := q'[SELECT DISTINCT D.DOSTAWCA_ID, D.NAZWA_FIRMY, A.MIEJSCOWOSC, A.WOJEWODZTWO ,A.KOD_POCZTOWY, A.ULICA, A.NR_DOMU, A.NR_LOKALU, KT.EMAIL, KT.NR_TEL, KT.FAX, KT.WWW FROM DOSTAWCA D, ADRES A, KONTAKT KT WHERE A.ADRES_ID = D.ADRES_ID AND KT.KONTAKT_ID = D.KONTAKT_ID]';
  191.  
  192.     OPEN MY_CURSOR FOR MY_QUERY;
  193.  
  194.     RETURN MY_CURSOR;
  195.   END SELECTDOSTAWCA;
  196.  
  197.   -- WYBIERZ DOSTAWCE PO ID
  198.   FUNCTION SELECTDOSTAWCAID(DOSTAW_ID INT)
  199.     RETURN SYS_REFCURSOR
  200.   AS
  201.     MY_CURSOR SYS_REFCURSOR;
  202.     MY_QUERY VARCHAR2(500);
  203.   BEGIN
  204.  
  205.     MY_QUERY := 'SELECT DISTINCT D.DOSTAWCA_ID, D.NAZWA_FIRMY, A.MIEJSCOWOSC, A.WOJEWODZTWO ,A.KOD_POCZTOWY, A.ULICA, A.NR_DOMU, A.NR_LOKALU, KT.EMAIL, KT.NR_TEL, KT.FAX, KT.WWW FROM DOSTAWCA D, ADRES A, KONTAKT KT WHERE A.ADRES_ID = D.ADRES_ID AND KT.KONTAKT_ID = D.KONTAKT_ID AND D.DOSTAWCA_ID = ' || DOSTAW_ID;
  206.  
  207.     OPEN MY_CURSOR FOR MY_QUERY;
  208.  
  209.     RETURN MY_CURSOR;
  210.   END SELECTDOSTAWCAID;
  211.  
  212.   -- DODAJ DOSTAWCE
  213.   PROCEDURE INSERTDOSTAWCA
  214.          (
  215.             NAZWA_FIR IN VARCHAR2,  
  216.             MIEJSC IN VARCHAR2,
  217.             WOJ IN VARCHAR2,
  218.             KOD_POCZT IN VARCHAR2,
  219.             UL IN VARCHAR2,
  220.             NR_DOM IN INT,
  221.             NR_LOK IN INT,
  222.             MAIL IN VARCHAR2,
  223.             TEL IN VARCHAR2,
  224.             FAX_1 IN VARCHAR2,          
  225.             WWW_1 IN VARCHAR2                  
  226.          )
  227.   AS
  228.             ADR_ID NUMBER;
  229.             KONT_ID NUMBER;
  230.   BEGIN
  231.  
  232.             INSERT INTO ADRES(MIEJSCOWOSC, WOJEWODZTWO, KOD_POCZTOWY, ULICA, NR_DOMU, NR_LOKALU) VALUES (MIEJSC, WOJ, KOD_POCZT, UL, NR_DOM, NR_LOK)
  233.             returning ADRES_ID INTO ADR_ID;
  234.            
  235.             INSERT INTO KONTAKT(NR_TEL, FAX, EMAIL, WWW) VALUES (TEL, FAX_1, MAIL, WWW_1)
  236.             returning KONTAKT_ID INTO KONT_ID;
  237.            
  238.          
  239.             INSERT INTO DOSTAWCA(KONTAKT_ID, ADRES_ID, NAZWA_FIRMY) VALUES (KONT_ID, ADR_ID, NAZWA_FIR);  
  240.  
  241.   END INSERTDOSTAWCA;
  242.  
  243.   -- USUN DOSTAWCE PO ID
  244.   PROCEDURE DELETEDOSTAWCA
  245.   (KON_ID IN INT)
  246.   AS
  247.   BEGIN
  248.     DELETE FROM DOSTAWCA
  249.     WHERE DOSTAWCA_ID = KON_ID;
  250.   END DELETEDOSTAWCA;
  251. END;
  252. /
  253.  
  254.  
  255.  
  256.  
  257. /* #########################    PRODUKTY    ######################### */
  258.  
  259. CREATE OR REPLACE PACKAGE PPRODUKT IS
  260.   FUNCTION LAST6PRODUCTS RETURN SYS_REFCURSOR;
  261.   FUNCTION SELECTPRODUKTY RETURN SYS_REFCURSOR;
  262.   FUNCTION SELECTPRODUKTYKATEGORIAID (KAT_ID IN VARCHAR2) RETURN SYS_REFCURSOR;
  263.   FUNCTION SELECTPRODUKTID (IDPROD INT) RETURN SYS_REFCURSOR;
  264.   PROCEDURE DELETEPRODUKT (PROD_ID IN INT);
  265. END;
  266. /
  267. CREATE OR REPLACE PACKAGE BODY PPRODUKT IS
  268.     -- POKAZ OSTATNIE 6 DODANYCH PRODUKTOW
  269.   FUNCTION LAST6PRODUCTS
  270.     RETURN SYS_REFCURSOR
  271.   AS
  272.     MY_CURSOR SYS_REFCURSOR;
  273.     MY_QUERY VARCHAR2(500);
  274.   BEGIN
  275.  
  276.     MY_QUERY := q'[SELECT * FROM ( SELECT TO_CHAR(DATA_DODANIA, 'DD-MON-YYYY HH24:MI') AS CTIME, PRODUKT.* FROM PRODUKT ORDER BY DATA_DODANIA DESC ) WHERE ROWNUM <= 6]';
  277.  
  278.     OPEN MY_CURSOR FOR MY_QUERY;
  279.  
  280.     RETURN MY_CURSOR;
  281.   END LAST6PRODUCTS;
  282.  
  283.   -- POKAZ PRODUKTY Z DANEJ KATEGORI
  284.   FUNCTION SELECTPRODUKTYKATEGORIAID(KAT_ID IN VARCHAR2)
  285.     RETURN SYS_REFCURSOR
  286.   AS
  287.     MY_CURSOR SYS_REFCURSOR;
  288.     MY_QUERY VARCHAR2(500);
  289.   BEGIN
  290.  
  291.     MY_QUERY := q'[SELECT * FROM ( SELECT TO_CHAR(DATA_DODANIA, 'DD-MON-YYYY HH24:MI') AS CTIME, PRODUKT.* FROM PRODUKT ORDER BY DATA_DODANIA DESC ) WHERE KATEGORIA_ID =']' || KAT_ID || q'[']' ;
  292.  
  293.     OPEN MY_CURSOR FOR MY_QUERY;
  294.  
  295.     RETURN MY_CURSOR;
  296.   END SELECTPRODUKTYKATEGORIAID;
  297.  
  298.   -- POKAZ WSYZSTKIE PRODUKTY
  299.   FUNCTION SELECTPRODUKTY
  300.     RETURN SYS_REFCURSOR
  301.   AS
  302.     MY_CURSOR SYS_REFCURSOR;
  303.     MY_QUERY VARCHAR2(500);
  304.   BEGIN
  305.  
  306.  
  307.     MY_QUERY := q'[SELECT DISTINCT P.PRODUKT_ID, D.NAZWA_FIRMY, K.KATEGORIA_NAZWA, P.PRODUCENT, P.NUMER_KATALOGOWY, P.MODEL, P.CENA, P.SZTUK_NA_MAGAZYNIE, TO_CHAR(P.DATA_DODANIA, 'DD-MON-YYYY HH24:MI') AS DATA_DOD, D.NAZWA_FIRMY, K.KATEGORIA_NAZWA FROM PRODUKT P, DOSTAWCA D, KATEGORIA K WHERE P.DOSTAWCA_ID = D.DOSTAWCA_ID AND P.KATEGORIA_ID = K.KATEGORIA_ID]';
  308.     OPEN MY_CURSOR FOR MY_QUERY;
  309.  
  310.     RETURN MY_CURSOR;
  311.   END SELECTPRODUKTY;
  312.  
  313.   -- POKAZ PRODUKT PO ID
  314.   FUNCTION SELECTPRODUKTID(IDPROD INT)
  315.     RETURN SYS_REFCURSOR
  316.   AS
  317.     MY_CURSOR SYS_REFCURSOR;
  318.     MY_QUERY VARCHAR2(500);
  319.   BEGIN
  320.  
  321.     MY_QUERY := q'[SELECT DISTINCT P.PRODUKT_ID, D.NAZWA_FIRMY, K.KATEGORIA_NAZWA, P.PRODUCENT, P.NUMER_KATALOGOWY, P.MODEL, P.CENA, P.SZTUK_NA_MAGAZYNIE, P.DATA_DODANIA, D.NAZWA_FIRMY, K.KATEGORIA_NAZWA FROM PRODUKT P, DOSTAWCA D, KATEGORIA K WHERE P.DOSTAWCA_ID = D.DOSTAWCA_ID AND P.KATEGORIA_ID = K.KATEGORIA_ID AND P.PRODUKT_ID = ']' || IDPROD || q'[']';
  322.  
  323.     OPEN MY_CURSOR FOR MY_QUERY;
  324.  
  325.     RETURN MY_CURSOR;
  326.   END SELECTPRODUKTID;
  327.  
  328.   -- USUN PRODUKT O ID
  329.   PROCEDURE DELETEPRODUKT
  330.   (PROD_ID IN INT)
  331.   AS
  332.   BEGIN
  333.     DELETE FROM PRODUKT
  334.     WHERE PRODUKT_ID = PROD_ID;
  335.   END DELETEPRODUKT;
  336. END;
  337. /
  338.  
  339.  
  340.  
  341. /* #########################    KATEGORIA    ######################### */
  342.  
  343. CREATE OR REPLACE PACKAGE PKATEGORIA IS
  344.   FUNCTION SELECTKATEGORIA RETURN SYS_REFCURSOR;
  345.   FUNCTION SELECTKATEGORIAID (KATEGORIA_ID INT) RETURN SYS_REFCURSOR;
  346.   PROCEDURE DELETEKATEGORIA (KAT_ID IN INT);
  347.   PROCEDURE INSERTKATEGORIA (VKATEGORIA_NAZWA IN VARCHAR2, VOPIS IN VARCHAR2);
  348. END;
  349. /
  350. CREATE OR REPLACE PACKAGE BODY PKATEGORIA IS
  351.   -- POKAZ WSZYSTKIE KATEGORIE
  352.   FUNCTION SELECTKATEGORIA
  353.     RETURN SYS_REFCURSOR
  354.   AS
  355.     MY_CURSOR SYS_REFCURSOR;
  356.     MY_QUERY VARCHAR2(500);
  357.   BEGIN
  358.  
  359.     MY_QUERY := q'[SELECT * FROM KATEGORIA]';
  360.  
  361.     OPEN MY_CURSOR FOR MY_QUERY;
  362.  
  363.     RETURN MY_CURSOR;
  364.   END SELECTKATEGORIA;
  365.  
  366.   -- POKAZ KATEGORIE PO ID
  367.   FUNCTION SELECTKATEGORIAID(KATEGORIA_ID INT)
  368.     RETURN SYS_REFCURSOR
  369.   AS
  370.     MY_CURSOR SYS_REFCURSOR;
  371.     MY_QUERY VARCHAR2(500);
  372.   BEGIN
  373.  
  374.     MY_QUERY := 'SELECT * FROM KATEGORIA WHERE KATEGORIA_ID = ' || KATEGORIA_ID;
  375.  
  376.     OPEN MY_CURSOR FOR MY_QUERY;
  377.  
  378.     RETURN MY_CURSOR;
  379.   END SELECTKATEGORIAID;
  380.  
  381.   -- USUN KATEGORIE PO ID
  382.   PROCEDURE DELETEKATEGORIA
  383.   (KAT_ID IN INT)
  384.   AS
  385.   BEGIN
  386.     DELETE FROM KATEGORIA
  387.     WHERE KATEGORIA_ID = KAT_ID;
  388.   END DELETEKATEGORIA;
  389.  
  390.   -- DODAJ KATEGORIE
  391.   PROCEDURE INSERTKATEGORIA(VKATEGORIA_NAZWA IN VARCHAR2, VOPIS IN VARCHAR2)
  392.   AS
  393.   BEGIN
  394.  
  395.       INSERT INTO KATEGORIA(KATEGORIA_NAZWA, OPIS) VALUES (VKATEGORIA_NAZWA, VOPIS);
  396.  
  397.   END INSERTKATEGORIA;
  398. END;
  399. /
  400.  
  401.  
  402.  
  403. /* #########################    KOSZYK    ######################### */
  404.  
  405. CREATE OR REPLACE PACKAGE PKOSZYK IS
  406.   FUNCTION POKAZKOSZYK (KONT_ID IN NUMBER) RETURN SYS_REFCURSOR;
  407.   FUNCTION COUNTSZTUKI(TABLENAME VARCHAR2, COLUMNNAME VARCHAR2, CONDITION VARCHAR2) RETURN NUMBER;
  408.   PROCEDURE INSERTKOSZYK (PROD_ID IN VARCHAR2, KON_ID IN VARCHAR2, ILOSC_SZT IN VARCHAR2);
  409.   PROCEDURE UPDATEKOSZYKINC (PROD_ID IN VARCHAR2, KON_ID IN VARCHAR2);
  410.   PROCEDURE UPDATEKOSZYKDEC (PROD_ID IN VARCHAR2, KON_ID IN VARCHAR2);
  411. END;
  412. /
  413. CREATE OR REPLACE PACKAGE BODY PKOSZYK IS
  414.   -- DODAJ PRODUKT DO KOSZYKA
  415.   PROCEDURE INSERTKOSZYK(PROD_ID IN VARCHAR2, KON_ID IN VARCHAR2, ILOSC_SZT IN VARCHAR2)
  416.   AS
  417.   BEGIN
  418.  
  419.       INSERT INTO KOSZYK(PRODUKT_ID, KONTO_ID, ILOSC_SZTUK) VALUES (PROD_ID, KON_ID, ILOSC_SZT);
  420.  
  421.   END INSERTKOSZYK;
  422.  
  423.   -- ZWIEKSZ ILOSC SZTUK DANEGO PRODUKTU O 1
  424.   PROCEDURE UPDATEKOSZYKINC(PROD_ID IN VARCHAR2, KON_ID IN VARCHAR2)
  425.   AS
  426.   BEGIN
  427.  
  428.       UPDATE KOSZYK
  429.           SET ILOSC_SZTUK = ILOSC_SZTUK + 1
  430.       WHERE PRODUKT_ID = PROD_ID
  431.       AND KONTO_ID = KON_ID;
  432.  
  433.   END UPDATEKOSZYKINC;
  434.  
  435.   -- ZMNIEJSZ ILOSC SZTUK DANEGO PRODUKTU O 1
  436.   PROCEDURE UPDATEKOSZYKDEC(PROD_ID IN VARCHAR2, KON_ID IN VARCHAR2)
  437.   AS
  438.       VILOSC_SZTUK NUMBER;
  439.       VPRODUKT_ID NUMBER;
  440.       VKONTO_ID NUMBER;
  441.   BEGIN
  442.  
  443.       UPDATE KOSZYK
  444.           SET ILOSC_SZTUK = ILOSC_SZTUK - 1
  445.       WHERE PRODUKT_ID = PROD_ID
  446.       AND KONTO_ID = KON_ID
  447.       returning
  448.       ILOSC_SZTUK, PRODUKT_ID, KONTO_ID INTO VILOSC_SZTUK, VPRODUKT_ID, VKONTO_ID;
  449.      
  450.       IF VILOSC_SZTUK < 1 THEN
  451.           DELETE FROM KOSZYK WHERE PRODUKT_ID = VPRODUKT_ID AND KONTO_ID = VKONTO_ID;
  452.       END IF;
  453.      
  454.   END UPDATEKOSZYKDEC;
  455.  
  456.   -- POKAZ KOSZYK
  457.   /* POLACZENIE TABELI KOSZYK I PRODUKT */
  458.   FUNCTION POKAZKOSZYK(KONT_ID IN NUMBER)
  459.     RETURN SYS_REFCURSOR
  460.   AS
  461.     MY_CURSOR SYS_REFCURSOR;
  462.     MY_QUERY VARCHAR2(500);
  463.   BEGIN
  464.  
  465.     MY_QUERY := q'[SELECT KOSZYK.PRODUKT_ID, PRODUKT.PRODUCENT, PRODUKT.MODEL,  PRODUKT.NUMER_KATALOGOWY, PRODUKT.CENA, KOSZYK.ILOSC_SZTUK, (KOSZYK.ILOSC_SZTUK*PRODUKT.CENA) as ILOCZYN, PRODUKT.SZTUK_NA_MAGAZYNIE FROM KOSZYK INNER JOIN PRODUKT ON KOSZYK.PRODUKT_ID = PRODUKT.PRODUKT_ID WHERE KOSZYK.KONTO_ID =']' || KONT_ID || q'[']';
  466.    
  467.     OPEN MY_CURSOR FOR MY_QUERY;
  468.  
  469.     RETURN MY_CURSOR;
  470.   END POKAZKOSZYK;
  471.  
  472.   -- LICZ SZTUKI W KOSZYKU
  473.   FUNCTION COUNTSZTUKI(TABLENAME VARCHAR2, COLUMNNAME VARCHAR2, CONDITION VARCHAR2)
  474.      RETURN NUMBER
  475.   AS
  476.      row_count NUMBER;
  477.      MY_QUERY VARCHAR2(500);
  478.   BEGIN
  479.  
  480.       MY_QUERY := 'SELECT ' || COLUMNNAME || ' FROM ' || TABLENAME || ' WHERE ' || CONDITION;
  481.       EXECUTE IMMEDIATE MY_QUERY INTO row_count;    
  482.  
  483.       RETURN row_count;
  484.   END COUNTSZTUKI;
  485. END;
  486. /
  487.  
  488.  
  489.  
  490. /* #########################    ZAMOWIENIE    ######################### */
  491.  
  492. CREATE OR REPLACE PACKAGE PZAMOWIENIE IS
  493.   PROCEDURE STWORZ_ZAMOWIENIE (KON_ID IN INT, KUR_ID IN INT, KOSZT_ZAM IN FLOAT, METODA_PLAT IN VARCHAR2, DOKUMENT_SPRZ IN VARCHAR2);
  494.   FUNCTION SELECTZAMOWIENIA RETURN SYS_REFCURSOR;
  495.   FUNCTION SELECTSZCZEGOLYZAMOWIENIA (ZAM_ID IN INT) RETURN SYS_REFCURSOR;
  496.   FUNCTION SELECTZAMOWIENIAID (ID_KONT IN INT) RETURN SYS_REFCURSOR;
  497.   PROCEDURE UPDATEZAMOWIENIE (ZAM_ID IN INT, VDATAREALIZACJI IN VARCHAR2, VZAAKCEPTOWANO IN INT, VZAPLACONO IN INT, VZREALIZOWANO IN INT);
  498. END;
  499. /
  500. CREATE OR REPLACE PACKAGE BODY PZAMOWIENIE IS
  501.   --Tworzy nowe zamowienie >> dodaje produkty z KOSZYK do ZAMOWIONE_PRODUKTY >> usuwa KOSZYK
  502.   PROCEDURE STWORZ_ZAMOWIENIE
  503.   (KON_ID IN INT, KUR_ID IN INT, KOSZT_ZAM IN FLOAT, METODA_PLAT IN VARCHAR2, DOKUMENT_SPRZ IN VARCHAR2)
  504.   AS
  505.     ID_ZAM NUMBER;
  506.     liczba NUMBER;
  507.   BEGIN
  508.     liczba := 0;
  509.     SELECT COUNT(*) INTO liczba FROM KOSZYK K, PRODUKT P
  510.     WHERE K.PRODUKT_ID = P.PRODUKT_ID AND K.ILOSC_SZTUK > P.SZTUK_NA_MAGAZYNIE AND K.KONTO_ID = KON_ID;
  511.    
  512.     IF liczba > 0
  513.     THEN
  514.       raise_application_error(-20008, 'zamowienie - blad');  
  515.     ELSE  
  516.       INSERT INTO ZAMOWIENIE (KONTO_ID, KURIER_ID, KOSZT_ZAMOWIENIA, METODA_PLATNOSCI, DOKUMENT_SPRZEDAZY)
  517.       VALUES (KON_ID, KUR_ID, KOSZT_ZAM, METODA_PLAT, DOKUMENT_SPRZ)
  518.       returning ZAMOWIENIE_ID INTO ID_ZAM;
  519.  
  520.       INSERT INTO ZAMOWIONE_PRODUKTY (PRODUKT_ID, ZAMOWIENIE_ID, ILOSC_SZTUK)
  521.       SELECT PRODUKT_ID, ID_ZAM, ILOSC_SZTUK FROM KOSZYK
  522.       WHERE
  523.         KONTO_ID = KON_ID;  
  524.  
  525.       DELETE FROM KOSZYK  
  526.       WHERE
  527.         KONTO_ID = KON_ID;
  528.     END IF;
  529.  
  530.   END;
  531.  
  532.   -- POKAZ WSZYSTKIE ZAMÓWIENIA
  533.   FUNCTION SELECTZAMOWIENIA
  534.     RETURN SYS_REFCURSOR
  535.   AS
  536.       MY_CURSOR SYS_REFCURSOR;  
  537.   BEGIN
  538.  
  539.   OPEN MY_CURSOR FOR
  540.      SELECT
  541.           ZAMOWIENIE.ZAMOWIENIE_ID,
  542.           ZAMOWIENIE.KONTO_ID,
  543.           KONTO.IMIE,
  544.           KONTO.NAZWISKO,
  545.           KURIER.NAZWA_FIRMY,
  546.           ZAMOWIENIE.DATA_PRZYJECIA_ZAMOWIENIA,
  547.           ZAMOWIENIE.DATA_REALIZACJI_ZAMOWIENIA,
  548.           ZAMOWIENIE.ZAMOWIENIE_ZAAKCEPTOWANE,
  549.           ZAMOWIENIE.ZAPLACONO,
  550.           ZAMOWIENIE.ZREALIZOWANO,
  551.           ZAMOWIENIE.KOSZT_ZAMOWIENIA,
  552.           ZAMOWIENIE.METODA_PLATNOSCI,
  553.           ZAMOWIENIE.DOKUMENT_SPRZEDAZY,
  554.           ADRES.MIEJSCOWOSC,
  555.           ADRES.WOJEWODZTWO,
  556.           ADRES.KOD_POCZTOWY,
  557.           ADRES.ULICA,
  558.           ADRES.NR_DOMU,
  559.           ADRES.NR_LOKALU,
  560.           KONTAKT.NR_TEL,
  561.           KONTAKT.EMAIL          
  562.       FROM ZAMOWIENIE
  563.         INNER JOIN KURIER ON ZAMOWIENIE.KURIER_ID = KURIER.KURIER_ID
  564.         INNER JOIN KONTO ON ZAMOWIENIE.KONTO_ID = KONTO.KONTO_ID
  565.         INNER JOIN ADRES ON KONTO.ADRES_ID = ADRES.ADRES_ID
  566.         INNER JOIN KONTAKT ON KONTO.KONTAKT_ID = KONTAKT.KONTAKT_ID;        
  567.   RETURN MY_CURSOR;  
  568.    
  569.   END SELECTZAMOWIENIA;
  570.  
  571.   -- POKAZ SZCZEGOLY ZAMÓWIENIA
  572.   FUNCTION SELECTSZCZEGOLYZAMOWIENIA (ZAM_ID IN INT)
  573.     RETURN SYS_REFCURSOR
  574.   AS
  575.       MY_CURSOR SYS_REFCURSOR;  
  576.   BEGIN
  577.  
  578.   OPEN MY_CURSOR FOR
  579.      SELECT
  580.           ZAMOWIONE_PRODUKTY.PRODUKT_ID,      
  581.           PRODUKT.PRODUCENT,
  582.           PRODUKT.MODEL,
  583.           PRODUKT.NUMER_KATALOGOWY,
  584.           ZAMOWIONE_PRODUKTY.ILOSC_SZTUK,  
  585.           ZAMOWIONE_PRODUKTY.ILOSC_SZTUK * PRODUKT.CENA AS KOSZT        
  586.       FROM ZAMOWIONE_PRODUKTY    
  587.         INNER JOIN PRODUKT ON ZAMOWIONE_PRODUKTY.PRODUKT_ID = PRODUKT.PRODUKT_ID
  588.      WHERE ZAMOWIONE_PRODUKTY.ZAMOWIENIE_ID = ZAM_ID;
  589.  
  590.   RETURN MY_CURSOR;  
  591.    
  592.   END SELECTSZCZEGOLYZAMOWIENIA;
  593.  
  594.   -- POKAZ ZAMOWIENIA: ID KLIENT
  595.   FUNCTION SELECTZAMOWIENIAID (ID_KONT IN INT)
  596.     RETURN SYS_REFCURSOR
  597.   AS
  598.       MY_CURSOR SYS_REFCURSOR;  
  599.   BEGIN
  600.  
  601.   OPEN MY_CURSOR FOR
  602.      SELECT
  603.           ZAMOWIENIE.ZAMOWIENIE_ID,
  604.           KURIER.NAZWA_FIRMY,
  605.           ZAMOWIENIE.DATA_PRZYJECIA_ZAMOWIENIA,
  606.           ZAMOWIENIE.DATA_REALIZACJI_ZAMOWIENIA,
  607.           ZAMOWIENIE.ZAMOWIENIE_ZAAKCEPTOWANE,
  608.           ZAMOWIENIE.ZAPLACONO,
  609.           ZAMOWIENIE.ZREALIZOWANO,
  610.           ZAMOWIENIE.KOSZT_ZAMOWIENIA,
  611.           ZAMOWIENIE.METODA_PLATNOSCI,
  612.           ZAMOWIENIE.DOKUMENT_SPRZEDAZY,
  613.           ADRES.MIEJSCOWOSC,
  614.           ADRES.WOJEWODZTWO,
  615.           ADRES.KOD_POCZTOWY,
  616.           ADRES.ULICA,
  617.           ADRES.NR_DOMU,
  618.           ADRES.NR_LOKALU,
  619.           KONTAKT.NR_TEL,
  620.           KONTAKT.EMAIL          
  621.       FROM ZAMOWIENIE
  622.         INNER JOIN KURIER ON ZAMOWIENIE.KURIER_ID = KURIER.KURIER_ID
  623.         INNER JOIN KONTO ON ZAMOWIENIE.KONTO_ID = KONTO.KONTO_ID
  624.         INNER JOIN ADRES ON KONTO.ADRES_ID = ADRES.ADRES_ID
  625.         INNER JOIN KONTAKT ON KONTO.KONTAKT_ID = KONTAKT.KONTAKT_ID
  626.       WHERE ZAMOWIENIE.KONTO_ID =  ID_KONT;    
  627.   RETURN MY_CURSOR;  
  628.    
  629.   END SELECTZAMOWIENIAID;
  630.  
  631.   -- UPDATE ZAMOWIENIE
  632.   PROCEDURE UPDATEZAMOWIENIE
  633.          (
  634.             ZAM_ID IN INT,
  635.             VDATAREALIZACJI IN VARCHAR2,
  636.             VZAAKCEPTOWANO IN INT,
  637.             VZAPLACONO IN INT,
  638.             VZREALIZOWANO IN INT      
  639.          )
  640.   AS
  641.  
  642.   BEGIN
  643.  
  644.       IF VDATAREALIZACJI IS NOT NULL THEN        
  645.               UPDATE ZAMOWIENIE
  646.                   SET DATA_REALIZACJI_ZAMOWIENIA =  TO_DATE(VDATAREALIZACJI, 'yyyy/mm/dd')
  647.               WHERE ZAMOWIENIE_ID = ZAM_ID;
  648.       END IF;      
  649.      
  650.       IF VZAAKCEPTOWANO IS NOT NULL THEN        
  651.               UPDATE ZAMOWIENIE
  652.                   SET ZAMOWIENIE_ZAAKCEPTOWANE = VZAAKCEPTOWANO
  653.               WHERE ZAMOWIENIE_ID = ZAM_ID;
  654.       END IF;  
  655.      
  656.       IF VZAPLACONO IS NOT NULL THEN        
  657.               UPDATE ZAMOWIENIE
  658.                   SET ZAPLACONO = VZAPLACONO
  659.               WHERE ZAMOWIENIE_ID = ZAM_ID;
  660.       END IF;  
  661.      
  662.       IF VZREALIZOWANO IS NOT NULL THEN        
  663.               UPDATE ZAMOWIENIE
  664.                   SET ZREALIZOWANO = VZREALIZOWANO
  665.               WHERE ZAMOWIENIE_ID = ZAM_ID;
  666.       END IF;  
  667.  
  668.   END UPDATEZAMOWIENIE;
  669. END;
  670. /
  671.  
  672.  
  673.  
  674. /* #########################    ADRES    ######################### */
  675.  
  676. CREATE OR REPLACE PACKAGE PADRES IS
  677.   PROCEDURE INSERTADRES (KON_ID IN INT, MIEJSC IN VARCHAR2, WOJ IN VARCHAR2, KOD_POCZT IN VARCHAR2, UL IN VARCHAR2, NR_DOM IN INT, NR_LOK IN INT);
  678. END;
  679. /
  680. CREATE OR REPLACE PACKAGE BODY PADRES IS
  681. -- TWORZY NOWY ADRES I DODAJE GO DO KONTA(KON_ID)
  682.   PROCEDURE INSERTADRES
  683.          (
  684.             KON_ID IN INT,
  685.             MIEJSC IN VARCHAR2,
  686.             WOJ IN VARCHAR2,
  687.             KOD_POCZT IN VARCHAR2,
  688.             UL IN VARCHAR2,
  689.             NR_DOM IN INT,
  690.             NR_LOK IN INT                
  691.          )
  692.   AS
  693.     ADR_ID NUMBER;
  694.   BEGIN
  695.    
  696.       INSERT INTO ADRES(ADRES_ID, MIEJSCOWOSC, WOJEWODZTWO, KOD_POCZTOWY, ULICA, NR_DOMU, NR_LOKALU) VALUES (ADR_ID, MIEJSC, WOJ, KOD_POCZT, UL, NR_DOM, NR_LOK);
  697.        
  698.       ADR_ID:= ADRES_SEQ.CURRVAL;
  699.  
  700.       UPDATE KONTO
  701.     SET ADRES_ID = ADR_ID
  702.     WHERE KONTO_ID = KON_ID;
  703.  
  704.   END INSERTADRES;
  705. END;
  706. /
  707.  
  708.  
  709.  
  710.  
  711. /* #########################    KONTAKT    ######################### */
  712.  
  713. CREATE OR REPLACE PACKAGE PKONTAKT IS
  714.   PROCEDURE INSERTKONTAKT (KON_ID IN INT, TEL IN VARCHAR2, FAX_1 IN VARCHAR2, MAIL IN VARCHAR2, WWW_1 IN VARCHAR2);
  715. END;
  716. /
  717.   CREATE OR REPLACE PACKAGE BODY PKONTAKT IS
  718.   --TWORZY NOWY KONTAKT I DODAJE GO DO KONTA(KON_ID)
  719.   PROCEDURE INSERTKONTAKT
  720.          (
  721.             KON_ID IN INT,
  722.             TEL IN VARCHAR2,
  723.             FAX_1 IN VARCHAR2,
  724.             MAIL IN VARCHAR2,
  725.             WWW_1 IN VARCHAR2            
  726.          )
  727.   AS
  728.     KONT_ID NUMBER;
  729.   BEGIN
  730.    
  731.           INSERT INTO KONTAKT(KONTAKT_ID, NR_TEL, FAX, EMAIL, WWW) VALUES (KONT_ID, TEL, FAX_1, MAIL, WWW_1);
  732.  
  733.           KONT_ID:= KONTAKT_SEQ.CURRVAL;  
  734.  
  735.           UPDATE KONTO
  736.           SET KONTAKT_ID = KONT_ID
  737.           WHERE KONTO_ID = KON_ID;
  738.  
  739.   END INSERTKONTAKT;
  740. END;
  741. /
  742.  
  743.  
  744.  
  745. /* #########################     INNE FUNKCJE    ######################### */
  746.  
  747. CREATE OR REPLACE PACKAGE PINNE IS
  748.     FUNCTION COUNTRW (TABLENAME VARCHAR2, COLUMNNAME VARCHAR2, CONDITION VARCHAR2) RETURN NUMBER;
  749.     PROCEDURE REJESTRACJA (USERNAME VARCHAR2 DEFAULT NULL, PASSWORD VARCHAR2 DEFAULT NULL, PASSWORD2 VARCHAR2 DEFAULT NULL, VIMIE VARCHAR2 DEFAULT NULL, VNAZWISKO VARCHAR2 DEFAULT NULL, VMAIL VARCHAR2 DEFAULT NULL, VWOJ VARCHAR2 DEFAULT NULL, VMIEJSC VARCHAR2 DEFAULT NULL, VPOCZT VARCHAR2 DEFAULT NULL, VULICA VARCHAR2 DEFAULT NULL, VNR_DOMU INT DEFAULT NULL, VNR_TEL VARCHAR2 DEFAULT NULL);
  750. END;
  751. /
  752. CREATE OR REPLACE PACKAGE BODY PINNE IS
  753. -- POKAZ LICZBE WIERSZY DLA DANEJ TABELI ORAZ KOLUMNY O ZADANYM WARUNKU
  754. FUNCTION COUNTRW(TABLENAME VARCHAR2, COLUMNNAME VARCHAR2, CONDITION VARCHAR2)
  755.    RETURN NUMBER
  756. AS
  757.    row_count NUMBER;
  758.    MY_QUERY VARCHAR2(500);
  759. BEGIN
  760.  
  761.     MY_QUERY := 'SELECT COUNT(' || COLUMNNAME || ') FROM ' || TABLENAME || ' WHERE ' || CONDITION;
  762.     EXECUTE IMMEDIATE MY_QUERY INTO row_count;    
  763.  
  764.     RETURN row_count;
  765. END COUNTRW;
  766.  
  767. -- REJESTRACJA
  768. PROCEDURE REJESTRACJA( USERNAME VARCHAR2 DEFAULT NULL,
  769.       PASSWORD VARCHAR2 DEFAULT NULL,
  770.       PASSWORD2 VARCHAR2 DEFAULT NULL,
  771.       VIMIE VARCHAR2 DEFAULT NULL,
  772.       VNAZWISKO VARCHAR2 DEFAULT NULL,
  773.       VMAIL VARCHAR2 DEFAULT NULL,
  774.       VWOJ VARCHAR2 DEFAULT NULL,
  775.       VMIEJSC VARCHAR2 DEFAULT NULL,
  776.       VPOCZT VARCHAR2 DEFAULT NULL,
  777.       VULICA VARCHAR2 DEFAULT NULL,
  778.       VNR_DOMU INT DEFAULT NULL,
  779.       VNR_TEL VARCHAR2 DEFAULT NULL
  780.       )
  781.      IS
  782.        n BOOLEAN;
  783.        m INTEGER;
  784.        DIFFER INTEGER;
  785.        ISDIGIT BOOLEAN;
  786.        ISCHAR  BOOLEAN;
  787.        ISPUNCT BOOLEAN;
  788.        DIGITARRAY VARCHAR2(20);
  789.        PUNCTARRAY VARCHAR2(25);
  790.        CHARARRAY VARCHAR2(52);
  791.        num_rows NUMBER:=0;
  792.  
  793.     BEGIN
  794.        DIGITARRAY:= '0123456789';
  795.        CHARARRAY:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  796.        PUNCTARRAY:='!"#$%&()``*+,-/:;<=>?_.';      
  797.        
  798.        -- Sprawdz czy nazwa uzytkownika jest w systemie
  799.        SELECT COUNT(*) INTO num_rows
  800.             FROM KONTO
  801.             WHERE LOGIN = USERNAME;
  802.  
  803.         IF num_rows > 0 THEN
  804.             raise_application_error(-20006, 'Nazwa uzytkownika jest juz w systemie');
  805.         END IF;
  806.        
  807.        -- jezeli pole jest puste
  808.        IF USERNAME IS NULL OR PASSWORD IS NULL OR PASSWORD2 IS NULL OR VIMIE IS NULL OR VNAZWISKO IS NULL OR VMAIL IS NULL
  809.        OR VWOJ IS NULL OR VMIEJSC IS NULL OR VPOCZT IS NULL OR VULICA IS NULL OR VNR_DOMU IS NULL OR VNR_TEL IS NULL THEN
  810.          raise_application_error(-20001, 'Wypelnij wszystkie pola');
  811.        END IF;
  812.  
  813.        -- Hasla sie roznia
  814.        IF PASSWORD != PASSWORD2 THEN
  815.          raise_application_error(-20002, 'hasla sie od siebie roznia');
  816.        END IF;
  817.        
  818.        -- Sprawdz dlugosc hasla
  819.        IF LENGTH(PASSWORD) < 7 THEN
  820.           raise_application_error(-20003, 'Haslo zbyt krotkie (mniej niz 7 znakow)');
  821.        END IF;
  822.  
  823.        -- Sprawdz czy hasla nie ma na blackliscie
  824.        IF NLS_LOWER(PASSWORD) IN ('welcome', 'database', 'account', 'user', 'password',
  825.     'oracle', 'gofishingshop', 'admin', 'login') THEN
  826.           raise_application_error(-20004, 'haslo zbyt latwe');
  827.        END IF;
  828.  
  829.        -- Sprawdz czy haslo ma przynajmniej jedna litere, jedna cyfre i znak przestankowy
  830.        -- 1. Szukaj cyfry
  831.        ISDIGIT:=FALSE;
  832.        m := LENGTH(PASSWORD);
  833.        FOR i IN 1..10 LOOP
  834.           FOR j IN 1..m LOOP
  835.              IF SUBSTR(PASSWORD,j,1) = SUBSTR(DIGITARRAY,i,1) THEN
  836.                 ISDIGIT:=TRUE;
  837.                  GOTO findchar;
  838.              END IF;
  839.           END LOOP;
  840.        END LOOP;
  841.      IF ISDIGIT = FALSE THEN
  842.           raise_application_error(-20005, 'haslo powinno miec przynajmniej jedna litere, jedna cyfre i znak przestankowy');
  843.        END IF;
  844. <<findchar>>
  845.        -- 2. Szukaj litery
  846.        ISCHAR:=FALSE;
  847.        FOR i IN 1..LENGTH(CHARARRAY) LOOP
  848.           FOR j IN 1..m LOOP
  849.              IF SUBSTR(PASSWORD,j,1) = SUBSTR(CHARARRAY,i,1) THEN
  850.                 ISCHAR:=TRUE;
  851.                  GOTO findpunct;
  852.              END IF;
  853.           END LOOP;
  854.        END LOOP;
  855.        IF ISCHAR = FALSE THEN
  856.           raise_application_error(-20005, 'haslo powinno miec przynajmniej jedna litere, jedna cyfre i znak przestankowy');
  857.        END IF;
  858. <<findpunct>>
  859.        -- 3. Szukaj znaku przestankowego
  860.        ISPUNCT:=FALSE;
  861.        FOR i IN 1..LENGTH(PUNCTARRAY) LOOP
  862.           FOR j IN 1..m LOOP
  863.              IF SUBSTR(PASSWORD,j,1) = SUBSTR(PUNCTARRAY,i,1) THEN
  864.                 ISPUNCT:=TRUE;
  865.                  GOTO endsearch;
  866.              END IF;
  867.           END LOOP;
  868.        END LOOP;
  869.        IF ISPUNCT = FALSE THEN
  870.           raise_application_error(-20005, 'haslo powinno miec przynajmniej jedna litere, jedna cyfre i znak przestankowy');
  871.        END IF;
  872. <<endsearch>>
  873.  
  874.  INSERT INTO ADRES(MIEJSCOWOSC, WOJEWODZTWO, KOD_POCZTOWY, ULICA, NR_DOMU)
  875.     VALUES(VMIEJSC, VWOJ, VPOCZT, VULICA, VNR_DOMU);
  876.  INSERT INTO KONTAKT(NR_TEL, EMAIL)
  877.     VALUES(VNR_TEL, VMAIL);
  878.  INSERT INTO KONTO(ADRES_ID, KONTAKT_ID, LOGIN, HASLO, IMIE, NAZWISKO)
  879.     VALUES(ADRES_SEQ.CURRVAL, KONTAKT_SEQ.CURRVAL, USERNAME, PASSWORD, VIMIE, VNAZWISKO);
  880.  END;
  881.  
  882. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement