Advertisement
Guest User

Untitled

a guest
Jun 11th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Oracle 11g Express Edition
  2. --please drop objects you've created at the end of the script
  3. --or check for their existance before creating
  4. --'\\' is a delimiter
  5. DECLARE
  6. sqlquery VARCHAR2(128);
  7. tabName VARCHAR2(30) := 'tabela';
  8. VNAZWISKO VARCHAR2(30) := 'nazwisko';
  9. BEGIN
  10.     --sqlquery := 'UPDATE ' || tabName || ' SET NAZWISKO = ''KOWALSKA_NOWY'' WHERE NAZWISKO = ''KOWALSKA''';
  11.     sqlquery := 'UPDATE ' || tabName || ' SET NAZWISKO = ''' || VNAZWISKO || ''' WHERE NAZWISKO = ''KOWALSKA''';
  12.     dbms_output.put_line(sqlquery);
  13. END;
  14.  
  15.  
  16. CREATE OR REPLACE PROCEDURE updatedbms (tabela VARCHAR2, iimie VARCHAR2) IS
  17.     curs INTEGER(10);
  18.     ret INTEGER(10);
  19.     sqlquery VARCHAR2(128);
  20. BEGIN
  21.     sqlquery := 'insert into ' || tabela || '(imie) values(:im)';
  22.     curs := DBMS_SQL.OPEN_CUROSR;
  23.     DMBS_SQL.PARSE(curs, sqlquery, DMS_SQL.NATIVE);
  24.     DBMS_SQL.BIND_VARIABLE(curs,':im',iimie);
  25.     ret := DBMS_SQL.EXECUTE(curs);
  26.     DBMS_SQL.CLOSE_CURSOR(curs);
  27.     DBMS_OUTPUT.PUT_LINE(ret);
  28. END;
  29.  
  30. DECLARE
  31.     obj telefon := NEW telefon(...);
  32. BEGIN
  33.  
  34.  
  35. --3--
  36. CREATE TYPE TELEFON AS OBJECT(
  37. NAZWA_SIECI VARCHAR2(30),
  38. NUMER NUMBER,
  39. DARMOWE_MINUTY NUMBER
  40. );
  41.  
  42. CREATE TABLE TELEFONY OF TELEFON;
  43.  
  44. INSERT INTO TELEFONY VALUES(NEW TELEFON('TMOBILE', 666925358, 12000));
  45. INSERT INTO TELEFONY VALUES(NEW TELEFON('ORANGE', 666222333, 1200));
  46.  
  47. SELECT * FROM TELEFONY;
  48.  
  49. SELECT VALUE(A).NAZWA_SIECI, VALUE(A).NUMER, VALUE(A).DARMOWE_MINUTY FROM TELEFONY A;
  50.  
  51. --4--
  52. CREATE TYPE WLASCICIEL OBJECT(
  53. IMIE VARCHAR2(150000),
  54. NAZWISKO VARCHAR(120000),
  55. TEL REF TELEFON
  56.     );
  57.  
  58. CREATE TABLE WLASCICIELE OF WLASCICIEL;
  59.  
  60. ALTER TABLE WLASCICIELE ADD SCOPE FOR(TEL) IS TELEFONY;
  61.  
  62. ALTER TYPE wlasciciel REPLACE AS object(
  63.     IMIE VARCHAR2(150000),
  64.     NAZWISKO VARCHAR(120000),
  65.     TEL REF TELEFON,
  66.     member FUNCTION mintosek(minu NUMBER) RETURN NUMBER,
  67.     member PROCEDURE darmowemin(wykorzystane NUMBER),
  68.     constructor FUNCTION wlasciciel(imie VARCHAR2, nazwisko VARCHAR2)
  69.         RETURN self AS result
  70.     );
  71.  
  72.  
  73.  
  74. CREATE OR REPLACE TYPE BODY wlascicel AS
  75.     member FUNCTION mintosek(minu NUMBER) RETURN NUMBER IS
  76.         BEGIN
  77.             RETURN minu*60;
  78.     END mintosek;
  79.     member PROCEDURE darmowemin(wykorzystane NUMBER) IS
  80.         BEGIN
  81.             self.tel.DARMOWE_MINUTY := self.tel.DARMOWE_MINUTY - wykorzystane;
  82.     END darmowemin;
  83.     constructor FUNCTION wlasciciel(imie VARCHAR2, nazwisko VARCHAR2) RETURN self AS result IS
  84.         BEGIN
  85.         self.IMIE:=imie;
  86.         self.NAZWISKO:=nazwisko;
  87.         self.TEL:=NULL;
  88.         RETURN;
  89.     END;
  90. END;
  91.  
  92. constructor FUNCTION ksiazka(tytul VARCHAR2, autor VARCHAR2, licz_str NUMBER,
  93.                                     cena FLOAT, data_wyd NUMBER) RETURN self AS result IS
  94.         BEGIN
  95.             self.tytul := tytul;
  96.             self.autor := autor;
  97.             self. licz_str := licz_str;
  98.             self.cena := cena;
  99.             self.data_wyd := data_wyd;
  100.             self.czytelnikk := NULL;
  101.             liczwartosc();
  102.             RETURN;
  103.         END;
  104.  
  105.  
  106.  
  107.  
  108. CREATE OR REPLACE TYPE ceny AS TABLE OF character varying(50);
  109.  
  110. DECLARE
  111.     cceny ceny := ceny(1,2,3,4,5,6);
  112.     x numeric;
  113. BEGIN
  114.     FOR x IN cceny.FIRST()..cceny.LAST() LOOP
  115.         dbms_output.put_line(cceny(x));
  116.     END LOOP;
  117.     cceny.extend(2);
  118.     cceny.DELETE(3);
  119.     cceny.DELETE(4);
  120.     FOR x IN cceny.FIRST()..cceny.LAST() LOOP
  121.         IF cceny.EXISTS(x) THEN
  122.             dbms_output.put_line(cceny(x));
  123.         END IF;
  124.     END LOOP;
  125.     dbms_output.put_line(cceny(5));
  126.     dbms_output.put_line(cceny(6));
  127. END;
  128.  
  129. CREATE TYPE ksiazka AS object (
  130.     tytul VARCHAR2(30),
  131.     autor VARCHAR2(30),
  132.     licz_str NUMBER(4,0),
  133.     cena FLOAT(5),
  134.     data_wyd NUMBER(4,0)
  135. );
  136.  
  137. CREATE TABLE Ksiazki OF Ksiazka;
  138. INSERT INTO Ksiazki VALUES(NEW Ksiazka('Tytul1', 'Autor1', 300, 19.99, 1997));
  139. INSERT INTO Ksiazki VALUES('Tytul2', 'Autor2', 301, 20, 1999);
  140. SELECT * FROM ksiazki;
  141. SELECT VALUE(p) FROM ksiazki p;
  142.  
  143. CREATE TABLE biblioteka (
  144.     nazwa VARCHAR2(30),
  145.     adres VARCHAR2(30),
  146.     ksiazkaa ksiazka);
  147.    
  148. INSERT INTO BIBLIOTEKA VALUES('bibl1', 'adres1', NEW Ksiazka('Tytul1', 'Autor1', 300, 19.99, 1997));
  149.  
  150. SELECT * FROM BIBLIOTEKA;
  151.  
  152. INSERT INTO BIBLIOTEKA VALUES('bibl1', 'adres1', NEW Ksiazka('Tytul2', 'Autor2', 313, 1.33, 1994));
  153. INSERT INTO BIBLIOTEKA VALUES('bibl1', 'adres1', NEW Ksiazka('Tytul3', 'Autor3', 355, 19, 1977));
  154. INSERT INTO BIBLIOTEKA VALUES('bibl2', 'adres2', NEW Ksiazka('Tytul2', 'Autor2', 313, 1.33, 1994));
  155. INSERT INTO BIBLIOTEKA VALUES('bibl3', 'adres3', NEW Ksiazka('Tytul3', 'Autor3', 355, 19, 1977));
  156.  
  157. SELECT p.ksiazkaa.tytul FROM biblioteka p;
  158.  
  159. CREATE TYPE ksiazka AS object (
  160.     tytul VARCHAR2(30),
  161.     autor VARCHAR2(30),
  162.     licz_str NUMBER(5,0),
  163.     cena FLOAT(10),
  164.     data_wyd NUMBER(5,0)
  165. );
  166.  
  167. ALTER TYPE ksiazka REPLACE AS object (
  168.     tytul VARCHAR2(30),
  169.     autor VARCHAR2(30),
  170.     licz_str NUMBER(5,0),
  171.     cena FLOAT(10),
  172.     data_wyd NUMBER(5,0),
  173.     member PROCEDURE liczWartosc,
  174.     constructor FUNCTION ksiazka(
  175.         tytul VARCHAR2,
  176.         autor VARCHAR2,
  177.         licz_str NUMBER,
  178.         cena FLOAT,
  179.         data_wyd NUMBER) RETURN self AS result,
  180.     map member FUNCTION odwzoruj RETURN NUMBER
  181. );
  182.  
  183. CREATE OR REPLACE TYPE BODY ksiazka AS
  184.     member PROCEDURE liczWartosc IS
  185.         BEGIN
  186.             FOR licz IN 1..(EXTRACT(YEAR FROM CURRENT_TIMESTAMP) - data_wyd) LOOP
  187.                 cena := cena * 0.95;
  188.             END LOOP;
  189.         END liczWartosc;
  190.     constructor FUNCTION ksiazka(tytul VARCHAR2, autor VARCHAR2, licz_str NUMBER,
  191.                                     cena FLOAT, data_wyd NUMBER) RETURN self AS result IS
  192.         BEGIN
  193.             self.tytul := tytul;
  194.             self.autor := autor;
  195.             self. licz_str := licz_str;
  196.             self.cena := cena;
  197.             self.data_wyd := data_wyd;
  198.             liczwartosc();
  199.             RETURN;
  200.         END;
  201.     map member FUNCTION odwzoruj RETURN NUMBER IS
  202.         BEGIN
  203.             RETURN data_wyd;
  204.         END;
  205. END;
  206.  
  207. CREATE TABLE ksiazki OF ksiazka;
  208.  
  209. INSERT INTO ksiazki VALUES(NEW Ksiazka('Tytul1', 'Autor1', 313, 19.33, 1994));
  210. INSERT INTO ksiazki VALUES(NEW Ksiazka('Tytul2', 'Autor2', 33, 12.33, 2000));
  211.  
  212. SELECT VALUE(k) FROM ksiazki k
  213.  
  214. ALTER TYPE ksiazka ADD map member FUNCTION odwzoruj RETURN NUMBER CASCADE including TABLE data;
  215.  
  216. SET serveroutput ON;
  217.  
  218. DECLARE
  219.     obj1 ksiazka := NEW Ksiazka('Tytul1', 'Autor1', 313, 19, 1994);
  220.     obj2 ksiazka := NEW Ksiazka('Tytul2', 'Autor2', 33, 22, 1994);
  221. BEGIN
  222.     IF obj1 = obj2 THEN
  223.         dbms_output.put_line('equals');
  224.     ELSE
  225.         dbms_output.put_line('not equals');
  226.     END IF;
  227. END;
  228.  
  229. CREATE TYPE czytelnik AS object (
  230.     imie VARCHAR2(30),
  231.     nazwisko VARCHAR2(30)
  232. );
  233.  
  234. CREATE TYPE ksiazka AS object (
  235.     tytul VARCHAR2(30),
  236.     autor VARCHAR2(30),
  237.     licz_str NUMBER(5,0),
  238.     cena FLOAT(10),
  239.     data_wyd NUMBER(5,0),
  240.     czytelnikk REF czytelnik
  241. );
  242.  
  243. ALTER TYPE ksiazka REPLACE AS object (
  244.     tytul VARCHAR2(30),
  245.     autor VARCHAR2(30),
  246.     licz_str NUMBER(5,0),
  247.     cena FLOAT(10),
  248.     data_wyd NUMBER(5,0),
  249.     czytelnikk REF czytelnik,
  250.     member PROCEDURE liczWartosc,
  251.     constructor FUNCTION ksiazka(
  252.         tytul VARCHAR2,
  253.         autor VARCHAR2,
  254.         licz_str NUMBER,
  255.         cena FLOAT,
  256.         data_wyd NUMBER) RETURN self AS result,
  257.     map member FUNCTION odwzoruj RETURN NUMBER
  258. );
  259.  
  260. CREATE OR REPLACE TYPE BODY ksiazka AS
  261.     member PROCEDURE liczWartosc IS
  262.         BEGIN
  263.             FOR licz IN 1..(EXTRACT(YEAR FROM CURRENT_TIMESTAMP) - data_wyd) LOOP
  264.                 cena := cena * 0.95;
  265.             END LOOP;
  266.         END liczWartosc;
  267.     constructor FUNCTION ksiazka(tytul VARCHAR2, autor VARCHAR2, licz_str NUMBER,
  268.                                     cena FLOAT, data_wyd NUMBER) RETURN self AS result IS
  269.         BEGIN
  270.             self.tytul := tytul;
  271.             self.autor := autor;
  272.             self. licz_str := licz_str;
  273.             self.cena := cena;
  274.             self.data_wyd := data_wyd;
  275.             self.czytelnikk := NULL;
  276.             liczwartosc();
  277.             RETURN;
  278.         END;
  279.     map member FUNCTION odwzoruj RETURN NUMBER IS
  280.         BEGIN
  281.             RETURN data_wyd;
  282.         END;
  283. END;
  284.  
  285. CREATE TABLE czytelnicy OF czytelnik;
  286.  
  287. INSERT INTO czytelnicy VALUES(NEW czytelnik('aaa', 'aaa'));
  288. INSERT INTO czytelnicy VALUES(NEW czytelnik('bbb', 'bbb'));
  289. INSERT INTO czytelnicy VALUES(NEW czytelnik('ccc', 'ccc'));
  290.  
  291. CREATE TABLE ksiazki OF ksiazka;
  292. ALTER TABLE ksiazki ADD scope FOR(czytelnikk) IS czytelnicy;
  293.  
  294. --insert into ksiazki values(new Ksiazka('Tytul1', 'Autor1', 313, 19, 1994, new czytelnik('ddd', 'ddd')));
  295. INSERT INTO ksiazki VALUES(NEW Ksiazka('Tytul1', 'Autor1', 313, 19, 1994, NULL));
  296. INSERT INTO ksiazki VALUES(NEW Ksiazka('Tytul1', 'Autor1', 313, 19, 1994, (SELECT REF(c) FROM czytelnicy c WHERE imie LIKE 'aaa')));
  297. INSERT INTO ksiazki VALUES(NEW Ksiazka('Tytul1', 'Autor1', 313, 19, 1994, (SELECT REF(c) FROM czytelnicy c WHERE imie LIKE 'bbb')));
  298.  
  299. SELECT * FROM ksiazki;
  300. SELECT DISTINCT * FROM ksiazki;
  301. SELECT k.czytelnikk.imie, k.czytelnikk.nazwisko FROM ksiazki k;
  302. SELECT k.tytul, k.autor, DEREF(k.czytelnikk) FROM ksiazki k;
  303.  
  304. DELETE FROM czytelnicy WHERE imie LIKE 'bbb';
  305. UPDATE ksiazki SET czytelnikk = NULL WHERE czytelnikk IS dangling;
  306.  
  307.  
  308.  
  309. --GRUPA 2
  310.  
  311.  
  312. --ZAD 1
  313. --1.    Korzystając z pakietu DBMS_SQL napisz procedurę uaktualniając rekord z nazwiskiem KOWALSKA
  314. --KOWALSKA_NOWY z tabeli o podanej nazwie będącej
  315. --parametrem procedury.
  316.  
  317. CREATE OR REPLACE PROCEDURE grupa2zad1(tabName VARCHAR2, vnazwisko VARCHAR2) IS
  318. sqlquery VARCHAR2(128);
  319. curs BINARY_INTEGER;
  320. retval BINARY_INTEGER;
  321. BEGIN
  322.     --sqlquery := 'UPDATE ' || tabName || ' SET NAZWISKO = ''KOWALSKA_NOWY'' WHERE NAZWISKO = ''KOWALSKA''';
  323.     sqlquery := 'UPDATE ' || tabName || ' SET NAZWISKO = ''' || VNAZWISKO || ''' WHERE NAZWISKO = ''KOWALSKA''';
  324.     dbms_output.put_line(sqlquery);
  325.     curs := DBMS_SQL.OPEN_CURSOR;
  326.     dbms_output.put_line(curs);
  327.     DBMS_SQL.PARSE(curs, sqlquery, DBMS_SQL.NATIVE);
  328.     retval := DBMS_SQL.EXECUTE(curs);
  329.     DBMS_SQL.CLOSE_CURSOR(curs);
  330. END;
  331.  
  332. CREATE TABLE GRUPA2ZAD1TAB(IMIE VARCHAR2(128), NAZWISKO VARCHAR2(128));
  333.  
  334. INSERT INTO GRUPA2ZAD1TAB VALUES('SIEMA', 'ENIU');
  335. INSERT INTO GRUPA2ZAD1TAB VALUES('WIESLAAWA', 'KOWALSKA');
  336.  
  337. SET SERVEROUTPUT ON
  338. DECLARE
  339. BEGIN
  340.     grupa2zad1('GRUPA2ZAD1TAB', 'xd');
  341. END;
  342.  
  343.  
  344.  
  345.  
  346.  
  347. --ZAD2
  348. --2. Utworzyć procedurę przyjmującą jako parametry nazwę tabeli i nazwę kolumny typu NUMBER.
  349. --Korzystając z dynamicznego SQL policz sumę wartości z kolumny będącej
  350. --parametrem wywołania oraz liczbę różnych wartości tej kolumny
  351. --Wynik zapisz w tabeli jednokolumnowej w postaci np.: SUMA = 34, liczba różnych = 5 
  352.  
  353. CREATE TABLE RESULTSZAD2(data_ VARCHAR2(128));
  354. CREATE OR REPLACE PROCEDURE grupa2zad2(tabName VARCHAR2, kolName VARCHAR2)
  355. IS
  356. sqlquery VARCHAR2(128);
  357. sumval INT(32);
  358. distinctval INT(32);
  359. BEGIN
  360.     sqlquery := 'SELECT SUM(' || kolName || ') FROM ' || tabName;
  361.     EXECUTE IMMEDIATE(sqlquery) INTO sumval;
  362.     sqlquery := 'SELECT COUNT(*) FROM (SELECT DISTINCT ' || kolName || ' FROM ' || tabName || ')';
  363.     EXECUTE IMMEDIATE(sqlquery) INTO distinctval;
  364.     INSERT INTO RESULTSZAD2 VALUES('SUMA = ' || sumval || ', rozne = ' || distinctval);
  365. END;
  366.  
  367. SET SERVEROUTPUT ON
  368. DECLARE
  369. BEGIN
  370.     grupa2zad2('STUDENT', 'ID_STUDENT');
  371. END;
  372.  
  373.  
  374.  
  375.  
  376.  
  377. --ZAD3
  378. --3.    Zdefiniuj typ obiektowy reprezentujący STUDENTA.
  379. --Każdy STUDENT powinien mieć nazwisko i imię, datę urodzenia oraz nr indeksu.
  380. --Utwórz tablicę obiektową i wprowadź dwa przykładowe obiekty.
  381. --Wypisz zawartość tablicy w postaci obiektowej i relacyjnej.
  382.  
  383. CREATE OR REPLACE TYPE STUDENTZAD3GRP2 AS OBJECT(
  384.     imie VARCHAR2(128),
  385.     nazwisko VARCHAR2(128),
  386.     data_ur DATE,
  387.     nr_indx INT(16)
  388. );
  389.  
  390. CREATE TABLE STUDENCIZAD3GRP2 OF STUDENTZAD3GRP2;
  391.  
  392. INSERT INTO STUDENCIZAD3GRP2 VALUES(NEW STUDENTZAD3GRP2('Abdul', 'Wisimulacha', TO_DATE('01/01/1990', 'dd/mm/yyyy'), 101));
  393. INSERT INTO STUDENCIZAD3GRP2 VALUES(NEW STUDENTZAD3GRP2('Wiesiek', 'Wisimupala', TO_DATE('01/05/1993', 'dd/mm/yyyy'), 111));
  394.  
  395. SELECT * FROM STUDENCIZAD3GRP2;
  396.  
  397. SELECT VALUE(B).IMIE, VALUE(B).NAZWISKO, VALUE(B).DATA_UR, VALUE(B).NR_INDX FROM STUDENCIZAD3GRP2 B;
  398.  
  399.  
  400.  
  401.  
  402.  
  403. --ZAD 4
  404. --4.    Utwórz tablicę ADRESY zawierającą adres zamieszkania studenta (miejscowość i ulica)
  405. --a następnie powiąż te obiekty za pomocą referencji.
  406. --Wstaw obiekty do tabeli STUDENT oraz ADRESY.
  407. --Wykonaj zapytania zwracające nazwisko i adres studenta - wykorzystaj nawigację
  408. --przez referencje.
  409.  
  410. --tworze typ bo jak kurwa referencja do tablicy adresow?
  411. CREATE OR REPLACE TYPE ADRESZAD4GRP2 AS OBJECT(
  412.     miejsc VARCHAR2(128),
  413.     ulica VARCHAR2(128)
  414. );
  415.  
  416. CREATE OR REPLACE TYPE STUDENTZAD4GRP2 AS OBJECT(
  417.     imie VARCHAR2(128),
  418.     nazwisko VARCHAR2(128),
  419.     data_ur DATE,
  420.     nr_indx INT(16),
  421.     adres REF ADRESZAD4GRP2
  422. );
  423.  
  424. CREATE TABLE ADRESYZAD4 OF ADRESZAD4GRP2;
  425. CREATE TABLE STUDENTYZAD4 OF STUDENTZAD4GRP2;
  426.  
  427. ALTER TABLE STUDENTYZAD4 ADD SCOPE FOR(adres) IS ADRESYZAD4;
  428.  
  429. INSERT INTO STUDENTYZAD4 VALUES
  430. (NEW STUDENTZAD4GRP2('Abdul','Wisimutromba',TO_DATE('01/05/1993', 'dd/mm/yyyy'), 101, NULL));
  431.  
  432. INSERT INTO ADRESYZAD4 VALUES('krakow', 'bronowicka');
  433.  
  434. UPDATE STUDENTYZAD4 SET STUDENTYZAD4.adres = (SELECT REF(C) FROM ADRESYZAD4 C WHERE C.miejsc = 'krakow' FETCH FIRST ROW ONLY);
  435.  
  436. SELECT * FROM STUDENTYZAD4;
  437.  
  438. SELECT B.imie, B.nazwisko, B.adres.miejsc FROM STUDENTYZAD4 B;
  439.  
  440. CREATE OR REPLACE PROCEDURE updatedbms (tabela VARCHAR2, iimie VARCHAR2) IS
  441.     curs INTEGER(10);
  442.     ret INTEGER(10);
  443.     sqlquery VARCHAR2(128);
  444. BEGIN
  445.     sqlquery := 'insert into ' || tabela || ' values(:im) where imie = ''Kamil''';
  446.     curs := DBMS_SQL.OPEN_CUROSR;
  447.     DMBS_SQL.PARSE(curs, sqlquery, DMS_SQL.NATIVE);
  448.     DBMS_SQL.BIND_VARIABLE(curs,':im',iimie);
  449.     ret := DBMS_SQL.EXECUTE(curs);
  450.     DBMS_SQL.CLOSE_CURSOR(curs);
  451.     DBMS_OUTPUT.PUT_LINE(ret);
  452. END;
  453.  
  454. DECLARE
  455.     wart BOOLEAN;
  456. BEGIN
  457.     wart := (EXTRACT(YEAR FROM SYSDATE) = '2017');
  458.     IF wart = TRUE THEN
  459.         DBMS_OUTPUT.PUT_LINE('true');
  460.     ELSE
  461.         DBMS_OUTPUT.PUT_LINE('false');
  462.     END IF;
  463. END;
  464.  
  465. CREATE TYPE TELEFON AS OBJECT(
  466. NAZWA_SIECI VARCHAR2(30),
  467. NUMER NUMBER,
  468. DARMOWE_MINUTY NUMBER
  469. );
  470.  
  471. CREATE TABLE TELEFONY OF TELEFON;
  472.  
  473. INSERT INTO TELEFONY VALUES(NEW TELEFON('TMOBILE', 666925358, 12000));
  474. INSERT INTO TELEFONY VALUES(NEW TELEFON('ORANGE', 666222333, 1200));
  475.  
  476. SELECT * FROM TELEFONY;
  477.  
  478. SELECT VALUE(A).NAZWA_SIECI, VALUE(A).NUMER, VALUE(A).DARMOWE_MINUTY FROM TELEFONY A;
  479.  
  480. --4--
  481. CREATE TYPE WLASCICIEL AS OBJECT(
  482. IMIE VARCHAR2(150),
  483. NAZWISKO VARCHAR(120),
  484. TEL REF TELEFON
  485.     );
  486.  
  487. CREATE TABLE WLASCICIELE OF WLASCICIEL;
  488.  
  489. ALTER TABLE WLASCICIELE ADD SCOPE FOR(TEL) IS TELEFONY;
  490.  
  491. ALTER TYPE wlasciciel REPLACE AS object(
  492.     IMIE VARCHAR2(150),
  493.     NAZWISKO VARCHAR(120),
  494.     TEL REF TELEFON,
  495.     member FUNCTION mintosek(minu NUMBER) RETURN NUMBER,
  496.     member PROCEDURE darmowemin(wykorzystane NUMBER)
  497.     );
  498.  
  499.  
  500.  
  501. CREATE OR REPLACE TYPE BODY wlasciciel AS
  502.     member FUNCTION mintosek(minu NUMBER) RETURN NUMBER IS
  503.         BEGIN
  504.             RETURN minu*60;
  505.     END mintosek;
  506.     member PROCEDURE darmowemin(wykorzystane NUMBER) IS
  507.         BEGIN
  508.             self.tel.DARMOWE_MINUTY := self.tel.DARMOWE_MINUTY - wykorzystane;
  509.     END darmowemin;
  510. END;
  511.  
  512. CREATE OR REPLACE TYPE ceny AS TABLE OF character varying(50);
  513.  
  514. SET serveroutput ON
  515. DECLARE
  516.     cceny ceny := ceny(1,2,3,4,5,6);
  517.     x numeric;
  518. BEGIN
  519.     FOR x IN cceny.FIRST()..cceny.LAST() LOOP
  520.         dbms_output.put_line(cceny(x));
  521.     END LOOP;
  522.     cceny.extend(2);
  523.     cceny.DELETE(3);
  524.     cceny.DELETE(4);
  525.     FOR x IN cceny.FIRST()..cceny.LAST() LOOP
  526.         IF cceny.EXISTS(x) THEN
  527.             dbms_output.put_line(cceny(x));
  528.         END IF;
  529.     END LOOP;
  530.     dbms_output.put_line(cceny(5));
  531.     dbms_output.put_line(cceny(6));
  532. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement