Advertisement
Guest User

Untitled

a guest
Mar 29th, 2015
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Aby to nehazelo error, ze tabulky neexistuji
  3. */
  4.  
  5. BEGIN
  6.       EXECUTE IMMEDIATE 'DROP TABLE klient CASCADE CONSTRAINTS';
  7. EXCEPTION
  8.       WHEN OTHERS THEN NULL;
  9. END;
  10. /
  11. BEGIN
  12.       EXECUTE IMMEDIATE 'DROP TABLE ucet CASCADE CONSTRAINTS';
  13. EXCEPTION
  14.       WHEN OTHERS THEN NULL;
  15. END;
  16. /
  17. BEGIN
  18.       EXECUTE IMMEDIATE 'DROP TABLE zmluva CASCADE CONSTRAINTS';
  19. EXCEPTION
  20.       WHEN OTHERS THEN NULL;
  21. END;
  22. /
  23. BEGIN
  24.       EXECUTE IMMEDIATE 'DROP TABLE makler CASCADE CONSTRAINTS';
  25. EXCEPTION
  26.       WHEN OTHERS THEN NULL;
  27. END;
  28. /
  29. BEGIN
  30.       EXECUTE IMMEDIATE 'DROP TABLE maklerovi_reality CASCADE CONSTRAINTS';
  31. EXCEPTION
  32.       WHEN OTHERS THEN NULL;
  33. END;
  34. /
  35. BEGIN
  36.       EXECUTE IMMEDIATE 'DROP TABLE dotaz CASCADE CONSTRAINTS';
  37. EXCEPTION
  38.       WHEN OTHERS THEN NULL;
  39. END;
  40. /
  41. BEGIN
  42.       EXECUTE IMMEDIATE 'DROP TABLE realita CASCADE CONSTRAINTS';
  43. EXCEPTION
  44.       WHEN OTHERS THEN NULL;
  45. END;
  46. /
  47. BEGIN
  48.       EXECUTE IMMEDIATE 'DROP TABLE prehliadka CASCADE CONSTRAINTS';
  49. EXCEPTION
  50.       WHEN OTHERS THEN NULL;
  51. END;
  52. /
  53. BEGIN
  54.       EXECUTE IMMEDIATE 'DROP TABLE predaj CASCADE CONSTRAINTS';
  55. EXCEPTION
  56.       WHEN OTHERS THEN NULL;
  57. END;
  58. /
  59.  
  60. CREATE TABLE klient(
  61.   id NUMBER NOT NULL,
  62.   email VARCHAR2(30) NOT NULL
  63. );
  64.  
  65. CREATE TABLE ucet(
  66.   id NUMBER NOT NULL,
  67.   jmeno VARCHAR2(30) NOT NULL,
  68.   prijmeni VARCHAR2(30) NOT NULL,
  69.   datum_nar DATE NOT NULL,
  70.   rodne_cis NUMBER NOT NULL,
  71.   cislo_op VARCHAR2(10) NOT NULL,
  72.   telefon NUMBER NOT NULL,
  73.   adresa VARCHAR2(100) NOT NULL,
  74.   potvrzeny_ucet NUMBER NOT NULL
  75. );
  76.  
  77. CREATE TABLE zmluva(
  78.   id NUMBER NOT NULL,
  79.   id_klienta NUMBER NOT NULL,
  80.   id_reality NUMBER NOT NULL,
  81.   stav NUMBER NOT NULL,
  82.   nabidka_ceny NUMBER NOT NULL
  83. );
  84.  
  85. CREATE TABLE makler(
  86.   id NUMBER NOT NULL,
  87.   jmeno VARCHAR2(30) NOT NULL,
  88.   prijmeni VARCHAR2(30) NOT NULL,
  89.   email VARCHAR2(30) NOT NULL,
  90.   telefon NUMBER NOT NULL
  91. );
  92.  
  93. CREATE TABLE maklerovi_reality(
  94.   id_maklere NUMBER NOT NULL,
  95.   id_reality NUMBER NOT NULL
  96. );
  97.  
  98. CREATE TABLE dotaz(
  99.   id NUMBER NOT NULL,
  100.   id_reality NUMBER NOT NULL,
  101.   otazka VARCHAR2(100) NOT NULL
  102. );
  103.  
  104. CREATE TABLE realita(
  105.   id NUMBER NOT NULL,
  106.   nazev VARCHAR2(30) NOT NULL,
  107.   kategorie NUMBER NOT NULL,
  108.   cena NUMBER NOT NULL,
  109.   datum_pridani DATE NOT NULL,
  110.   adresa VARCHAR2(100) NOT NULL
  111. );
  112.  
  113. CREATE TABLE prehliadka(
  114.   id NUMBER NOT NULL,
  115.   id_klienta NUMBER NOT NULL,
  116.   id_reality NUMBER NOT NULL,
  117.   datum_prohlidky DATE NOT NULL,
  118.   potvrzeno NUMBER NOT NULL
  119. );
  120.  
  121. CREATE TABLE predaj(
  122.   id NUMBER NOT NULL,
  123.   id_reality NUMBER NOT NULL,
  124.   id_klienta NUMBER NOT NULL,
  125.   datum_prodeje DATE NOT NULL,
  126.   cena NUMBER NOT NULL
  127. );
  128.  
  129. /* primarní klíče */
  130.  
  131. ALTER TABLE klient ADD CONSTRAINT PK_klient PRIMARY KEY (id);
  132.  
  133. ALTER TABLE ucet ADD CONSTRAINT PK_ucet PRIMARY KEY (id);
  134.  
  135. ALTER TABLE zmluva ADD CONSTRAINT PK_zmluva PRIMARY KEY (id);
  136.  
  137. ALTER TABLE makler ADD CONSTRAINT PK_makler PRIMARY KEY (id);
  138.  
  139. ALTER TABLE dotaz ADD CONSTRAINT PK_dotaz PRIMARY KEY (id);
  140.  
  141. ALTER TABLE realita ADD CONSTRAINT PK_realita PRIMARY KEY (id);
  142.  
  143. ALTER TABLE prehliadka ADD CONSTRAINT PK_prehliadka PRIMARY KEY (id);
  144.  
  145. ALTER TABLE predaj ADD CONSTRAINT PK_predaj PRIMARY KEY (id);
  146.  
  147. /* cizí klíče */
  148.  
  149. ALTER TABLE ucet ADD CONSTRAINT FK_ucet FOREIGN KEY(id) REFERENCES klient;
  150.  
  151. ALTER TABLE zmluva ADD CONSTRAINT FK_zmluva_klient FOREIGN KEY(id_klienta) REFERENCES ucet;
  152. ALTER TABLE zmluva ADD CONSTRAINT FK_zmluva_realita FOREIGN KEY(id_reality) REFERENCES realita;
  153.  
  154. ALTER TABLE maklerovi_reality ADD CONSTRAINT FK_maklerovi_reality_makler FOREIGN KEY(id_maklere) REFERENCES makler;
  155. ALTER TABLE maklerovi_reality ADD CONSTRAINT FK_maklerovi_reality_realita FOREIGN KEY(id_reality) REFERENCES realita;
  156.  
  157. ALTER TABLE dotaz ADD CONSTRAINT FK_dotaz FOREIGN KEY(id_reality) REFERENCES realita;
  158.  
  159. ALTER TABLE prehliadka ADD CONSTRAINT FK_prehliadka_klient FOREIGN KEY(id_klienta) REFERENCES klient;
  160. ALTER TABLE prehliadka ADD CONSTRAINT FK_prehliadka_realita FOREIGN KEY(id_reality) REFERENCES realita;
  161.  
  162. ALTER TABLE predaj ADD CONSTRAINT FK_predaj_realita FOREIGN KEY(id_reality) REFERENCES realita;
  163. ALTER TABLE predaj ADD CONSTRAINT FK_predaj_klient FOREIGN KEY(id_klienta) REFERENCES ucet;
  164.  
  165. /* Overeni rodneho cisla
  166.    nemusime testovat, jestli je to cislo
  167.    musime testovat delitelnost 11
  168.    musime testovat spravnost datumu
  169.    musime testovat delku (min 9, max 10)
  170.    pokud delka = 9 a koncovku 000 tak je spatne */
  171.  
  172. ALTER SESSION SET nls_date_format='dd.mm.yy';
  173. SET serveroutput ON;
  174.  
  175. CREATE OR REPLACE TRIGGER TR_rodne_cislo
  176.   BEFORE INSERT OR UPDATE OF rodne_cis ON ucet
  177.   FOR EACH ROW
  178. DECLARE
  179.   rod_c ucet.rodne_cis%TYPE;
  180.   den NUMBER(2);
  181.   mesic NUMBER(2);
  182.   rok NUMBER(2);
  183.   datum DATE;
  184. BEGIN
  185.   rod_c := :NEW.rodne_cis;               -- z rodneho cisla ...
  186.   mesic := MOD( (rod_c / 1000000), 100); -- zjistime mesic
  187.   den   := MOD( (rod_c / 10000), 100);   -- den
  188.   rok   := rod_c / 100000000;            -- rok  
  189.  
  190.   -- pokud rodne cislo neni delitelne 11
  191.   IF ( MOD(rod_c, 11) <> 0 ) THEN
  192.     Raise_Application_Error (-20203, 'Neplatne rodne cislo: Neni delitelne 11');
  193.   END IF;
  194.  
  195.   -- jestli je cislo vetsi nez 50, pak se jedna o zenu a 50 odecteme
  196.   IF ( mesic > 50 ) THEN
  197.     mesic := mesic - 50;
  198.   END IF;
  199.  
  200.   -- pokud se nejedna o platne datum, pak vznikne vyjimka
  201.   BEGIN
  202.     datum := den||'.'||mesic||'.'||rok;
  203.   EXCEPTION
  204.     WHEN OTHERS THEN
  205.        Raise_Application_Error (-20204, 'Neplatne datum v rodnem cisle');
  206.   END;
  207.  
  208.   -- pokud je kratsi nez 9
  209.   IF ( LENGTH(rod_c) < 9 ) THEN
  210.     Raise_Application_Error (-20205, 'Neplatne rodne cislo: Rodne cislo je kratsi, nez 9 znaku');
  211.   END IF;
  212.  
  213.   -- pokud je delsi nez 10
  214.   IF ( LENGTH(rod_c) > 10 ) THEN
  215.     Raise_Application_Error (-20206, 'Neplatne rodne cislo: Rodne cislo je delsi, nez 10 znaku');
  216.   END IF;
  217.  
  218.   -- pokud delka = 9 a koncovku 000 tak je spatne
  219.   IF ( LENGTH(rod_c) = 9 ) THEN
  220.     IF ( SUBSTR(TO_CHAR(rod_c), 7) = '000' ) THEN
  221.       Raise_Application_Error (-20207, 'Neplatne rodne cislo: Koncovka rodneho cisla 000 je nepripustna');
  222.     END IF;
  223.   END IF;
  224.  
  225. END TR_rodne_cislo;
  226. /
  227. show errors
  228. ALTER SESSION SET nls_date_format='dd.mm.yyyy';
  229.  
  230.  
  231. /* testovací data */
  232.  
  233. /* 3 uzivatele */
  234. INSERT INTO klient (ID, EMAIL) VALUES ('1', 'test1@email.cz');
  235. INSERT INTO klient (ID, EMAIL) VALUES ('2', 'test2@email.cz');
  236. INSERT INTO klient (ID, EMAIL) VALUES ('3', 'test3@email.cz');
  237.  
  238. /* pouze 2 z nich maji uplny ucet */
  239. INSERT INTO ucet (ID, JMENO, PRIJMENI, DATUM_NAR, RODNE_CIS, CISLO_OP, TELEFON, ADRESA, POTVRZENY_UCET) VALUES ('2', 'Test2', 'Protest2', TO_DATE('1950-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '9207214093', '123456789', '987654321', 'Nekde 5, Brno', '0');
  240. INSERT INTO ucet (ID, JMENO, PRIJMENI, DATUM_NAR, RODNE_CIS, CISLO_OP, TELEFON, ADRESA, POTVRZENY_UCET) VALUES ('3', 'Test3', 'Protest3', TO_DATE('1900-12-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '9203178237', '987654321', '123456789', 'Nekde 12, Brno', '1');
  241.  
  242. /* 3 testovaci makleri */
  243. /* ID pocitano od hodnoty 10, aby bylo poznat, kde se objevuji */
  244. INSERT INTO makler (ID, JMENO, PRIJMENI, EMAIL, TELEFON) VALUES ('10', 'Makler1', 'Prijmeni1', 'makler1@email.cz', '123456789');
  245. INSERT INTO makler (ID, JMENO, PRIJMENI, EMAIL, TELEFON) VALUES ('11', 'Makler2', 'Prijmeni2', 'makler2@email.cz', '789456123');
  246. INSERT INTO makler (ID, JMENO, PRIJMENI, EMAIL, TELEFON) VALUES ('12', 'Makler3', 'Prijmeni3', 'makler3@email.cz', '456123789');
  247.  
  248. /* 3 testovaci reality */
  249. /* ID pocitano od 100, aby bylo videt, kde se objevuji */
  250. INSERT INTO realita (ID, NAZEV, KATEGORIE, CENA, DATUM_PRIDANI, ADRESA) VALUES ('100', 'Nemovitost1', '1', '1000000', TO_DATE('2015-03-29 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Nekde 15, Brno');
  251. INSERT INTO realita (ID, NAZEV, KATEGORIE, CENA, DATUM_PRIDANI, ADRESA) VALUES ('101', 'Nemovitost2', '2', '4500000', TO_DATE('2010-06-05 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Nekde 23, Brno');
  252. INSERT INTO realita (ID, NAZEV, KATEGORIE, CENA, DATUM_PRIDANI, ADRESA) VALUES ('102', 'Nemovitost3', '3', '15000000', TO_DATE('2000-12-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Nekde 42, Brno');
  253.  
  254. /* propojeni makleru a realit */
  255. /* jedne makler ma 2 reality, dalsi jednu a posledni zadnou */
  256. INSERT INTO maklerovi_reality (ID_MAKLERE, ID_REALITY) VALUES ('10', '100');
  257. INSERT INTO maklerovi_reality (ID_MAKLERE, ID_REALITY) VALUES ('10', '102');
  258. INSERT INTO maklerovi_reality (ID_MAKLERE, ID_REALITY) VALUES ('12', '101');
  259.  
  260. /* 2 ruzne smlouvy, jedna je uz dokoncena*/
  261. INSERT INTO zmluva (ID, ID_KLIENTA, ID_REALITY, STAV, NABIDKA_CENY) VALUES ('1', '3', '100', '0', '500000');
  262. INSERT INTO zmluva (ID, ID_KLIENTA, ID_REALITY, STAV, NABIDKA_CENY) VALUES ('2', '2', '101', '1', '5000000');
  263.  
  264. /* dotaz k realite */
  265. INSERT INTO dotaz (ID, ID_REALITY, OTAZKA) VALUES ('1', '100', 'Bydli v dome neprizpusobivi spoluobcane?');
  266.  
  267. /* zadost o prohlidku */
  268. INSERT INTO prehliadka (ID, ID_KLIENTA, ID_REALITY, DATUM_PROHLIDKY, POTVRZENO) VALUES ('1', '1', '102', TO_DATE('2015-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '0');
  269. INSERT INTO prehliadka (ID, ID_KLIENTA, ID_REALITY, DATUM_PROHLIDKY, POTVRZENO) VALUES ('2', '2', '101', TO_DATE('2015-03-27 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '1');
  270.  
  271. /* dokonceny prodej */
  272. INSERT INTO predaj (ID, ID_REALITY, ID_KLIENTA, DATUM_PRODEJE, CENA) VALUES ('1', '101', '2', TO_DATE('2015-03-27 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '5000000');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement