All pastes #806456 Raw Edit

Someone

public sql v1 · immutable
·published 2007-12-05 09:01 UTC
rendered paste body
/********************LABORATORIUM 1:set autotrace on;select nazwisko, placa_pod from pracownicy;select nazwisko, placa_pod from pracownicy where numer = 1150; //użyto indexselect nazwisko, placa_pod from pracownicy where numer + 0 = 1150; //nie użyto indexuselect * from pracownicy, zespoly where nazwa like '%A';SELECT id_zesp FROM pracownicyMINUSSELECT id_zesp FROM pracownicy;SELECT kierunek, COUNT(*) FROM student GROUP BY kierunek UNION SELECT NULL, COUNT(*) FROM student; //niewydajneSELECT kierunek, COUNT(*) FROM studentGROUP BY cube(kierunek); //wydajne// przy DISTINCT pojawia się sortowanieSELECT * FROM (	SELECT nazwisko, placa_pod FROM pracownicy ORDER by placa_pod)WHERE ROWNUM <=4;/*********************WYKLAD 2:CREATE [OR REPLACE] TYPE nazwa AS OBJECT (	nazwa1 typ1 [...],	nazwa2 typ2 [...],	[MEMBER PROCEDURE nazwa_procedury],	[MEMBER FUNCTION nazwa_funkcji RETURN typ]);/DROP TYPE nazwa_typu;DESCRIBE nazwa_typu;CREATE OR REPLACE TYPE ulamek AS OBJECT (	licznik NUMBER (4),	mianownik NUMBER (4),	MEMBER PROCEDURE skroc);CREATE OR REPLACE TYPE BODY ulamek ASMEMBER PROCEDURE skrocIS	r NUMBER;BEGIN	r:=nwd (licznik, mianownik);	licznik:=licznik/r;	mianownik:=mianownik/r;END skroc;END;/CREATE TABLE ulamki (	atrybut ulamek,	CONSTRAINT ulamki_chk CHECK (atrybut.mianownik <> 0));INSERT INTO ulamki VALUES (ulamek (12, 4));CREATE TABLE ulamki_bis OF ulamek;ALTER TABLE ulamki_bis ADD CONSTRAINTS ulamki_bis_chk CHECK (mianownik <> 0);INSERT INTO ulamki_bis VALUES (3, 5);INSERT INTO ulamki_bis VALUES (12, 5);SELECT * FROM ulamki_bis;SELECT VALUE(u) FROM ulamki_bis u;/******** DZIEDZICZENIE:CREATE OR REPLACE TYPE publikacja AS OBJECT (	tytul VARCHAR2 (30),	autor VARCHAR2 (25)) NOT FINAL;/CREATE OR REPLACE TYPE recenzja UNDER publikacja (	dla_kogo_recenzja VARCHAR2 (30));CREATE OR REPLACE TYPE ksiazka UNDER publikacja (	wydawnictwo VARCHAR2 (20));CREATE TABLE publikacje OF publikacja;INSERT INTO publikacje VALUES (publikacja ('Systemy rozproszone', 'Roman Wychowaniec') );INSERT INTO publikacje VALUES ( recenzja ('Inzynieria oprogramowania', 'Krzysztof Wiaderek', 'Praca dyplomowa') );INSERT INTO publikacjeVALUES ( ksiazka ('Systemy baz danych', 'J. Date', 'PWN') );SELECT * FROM publikacje p;SELECT VALUE (p) FROM publikacje p;SELECT TREAT (VALUE(p) AS publikacja)FROM publikacje p WHERE autor LIKE '%D%';// VALUE (zmienna korelacyjna)// TREAT (wyrazenie AS typ) // rzutowanie/******************************LAB3CREATE OR REPLACE TYPE adres AS OBJECT (	kod VARCHAR2 (6),	miasto VARCHAR2 (20),	ulica VARCHAR2 (20));CREATE OR REPLACE TYPE osoba AS OBJECT (	pesel NUMBER (11),	nazwisko VARCHAR2 (20),	zam REF adres);CREATE TABLE osoby OF osoba;DECLARErob REF adres;BEGIN	INSERT INTO adresy Ad VALUES (0, 0, 0);	RETURNING RED (Ad) INTO rob;	INSERT INTO osoby VALUES (0, 0, rob);	INSERT INTO osoby VALUES (0, 0, rob);END;SELECT o.nazwisko, DEREF (o.zam) FROM osoby o;/******************** WYKLADCREATE OR REPLACE TYPE filia AS OBJECT (	numer NUMBER (1),	adres VARCHAR (25),	telefon VARCHAR (10));CREATE OR REPLACE TYPE filie AS VARRAY (5) OF filia;CREATE TABLE banki (	nazwa VARCHAR2 (20),	centrala VARCHAR2 (15),	oddzialy filie);INSERT INTO banki VALUES (	'PKO', 'Warszawa',	filie (filia(2, 'Czestochowa', '232323232'), filia (3, 'Krakow, '21323123')));CREATE OR REPLACE TYPE lokal AS OBJECT (	nazwa VARCHAR2 (20),	powierzchnia NUMBER (6, 1));CREATE OR REPLACE TYPE lokale AS TABLE OF lokal;CREATE OR REPLACE TYPE budynek AS OBJECT (	adres VARCHAR2 (30),	zasob lokale,	MEMBER FUNCTION lista_lokali RETURN NUMBER);CREATE OR REPLACE TYPE BODY budynek ASMEMBER FUNCTION liczba_lokali RETURN NUMBERISBEGIN	RETURN zasob COUNT();END liczba_lokali;END;CREATE TABLE budynki OF budynek NESTED TABLE zasob STORE AS zas_lokali;// Wskazanie miejsca zagniezdzenia tabeli zawsze gdy taka istniejeINSERT INTO budynki VALUES (budynek ('Czestochowa NMP 23',	lokale (lokal('Mieszkanie', 63.4), lokal ('Biuro', 78))) );SELECT * FROM budynki;SELECT adres, b.liczba_lokali() FROM budynki b;SELECT b.nazwa, b.powierzchnia FROM (	SELECT zasob FROM budynki WHERE adres LIKE '%K%') b;// THE = TABLE (nowszy i zalecany)INSERT INTO THE (SELECT zasob FROM budynki WHERE adres LIKE '%K%')	VALUES (lokal ('Biuro PZU', 125));/*************** PERSPEKTYWYkomputery (kom_id, typ_plyty, ram, procesor)dyski (dysk_id, komp_id, pojem, producent)CREATE OR REPLACE TYPE typ_dysk AS OBJECT (	dysk_id NUMBER (4),	pojem NUMBER (4, 1),	producent VARCHAR2 (10));CREATE OR REPLACE TYPE kolekcja dyskow AS TABLE OF typ_dysk;CREATE OR REPLACE TYPE typ_komputer AS OBJECT (	komp_id NUMBER (4),	typ_plyty VARCHAR2 (40),	ram NUMBER (3),	procesor VARCHAR2 (15),	dysk kolekcja_dyskow);CREATE OR REPLACE VIEW zb_komputery OF typ_komputerWITH OBJECT IDENTIFIER (komp_id)ASSELECT komp_id, typ_plyty, procesor, 	CAST(	    MULTISET(		SELECT typ_dysk(dysk_id, pojem, producent) FROM dyski WHERE komp_id = k.komp_id		) AS kolekcja_dyskow	)FROM komputery K// CAST (MULTISET (podzapytanie) AS typ_kolekcji)CREATE OR REPLACE TYPE nazwiska AS TABLE OF VARCHAR (30);SELECT nazwa, CAST (MULTISET(	SELECT nazwisko FROM pracownicy WHERE etat = nazwa) AS nazwiska)FROM etaty;// METODY NA VARRAY: count () extend () delete () last () first () next ()DECLARE	fil filie;	i NUMBER;BEGIN	SELECT oddzialy INTO fil FROM banki WHERE nazwa = 'PKO';	fil.extend (1);	fil(fil.last) := filia (4, 'Wroclaw', '23123123');	UPDATE banki SET oddzialy = fil WHERE nazwa = 'PKO';	FOR i IN 1..fil.count() LOOP		dbms_output.put_lines(fil(i).numer || ' ' || fil(i).adres);	END LOOP;END;