kolos

CREATE OR REPLACE TRIGGER wyzw BEFORE INSERT ON lekarze FOR EACH ROw DECLARE l_spec NUMBER(10); BEGIN SELECT count(*) INTO l_spec FROM lekarze WHERE id_specjalizacja=:NEW.id_specjalizacja; GROUP BY id_pokoj IF :NEW.data_urodzenia>SYSDATE THEN RAISE_APPLICATION_ERROR(-20000,'Blad wieku'); END IF; IF l_spec>9 THEN RAISE_APPLICATION_ERROR(-20001,'Za dużo specjalistów'); END IF; END;

CREATE OR REPLACE procedure proc CURSOR cur AS SELECT * FROM pacjenci FOR UPDATE; wyj exception; BEGIN FOR tmp in cur LOOP IF tmp.imie IS NULL THEN RAISE wyj; IF tmp.wiek>100 THEN //usuwanie END LOOP; EXCEPTION WHEN wyj then DBMS_OUTPUT.PUT_LINE('Blad'); END; EXECUTE proc;

CREATE OR REPLACE FUNCTION roznica AS RETURN NuMBER; st opieka.poczatek%ROWTYPE; kon opieka.koniec%ROWTYPE; ??roz lekarze.staz%TYPE;?? BEGIN SELECT poczatek INTO st FROM opieka; SELECT koniec INTO kon FROM opieka; roz:=kon-st; return roz; END; SELECT roznica FROM dual;

CREATE OR REPLACE VIEW widok AS SELECT l.imie, l.nazwisko, ilosc FROM lekarze l, opieka o ( SELECT id_pacjent nazwa, count(*) ilosc FROM opieka GROUP By id_pacjent ) WHERE p.id=nazwa AND l.id=o.id_lekarz AND o.poczatek IS NOT NULL;

select p.imie,p.nazwisko, p.wiek FROM pacjenci p ( SELECT l.id, count(*) il FROM lekarze l SUM(EXTRACT (YEAR FROM SYSDATE) - EXTRACT(YEAR FROM l.data_urodzenia)) suma GROUP BY l.id) ilo WHERE nazwisko like '%a' AND p.wiek> suma/ilo to jest pierwwsze ale nie wiem czy do końca dobrze mozesz się spytać miśka albo szcze SELECT nazwa,liczba FROM pokoje, ( SELECT id_pokoj numer,count(*) liczba FROM pacjenci GROUP BY id_pokoj HAVING count(*)>2 ) WHERe pokoje.id=numer ORDER BY nazwa DESC

SELECT l.imie,l.nazwisko, l.staz, l.data_urodzenia, s.nazwa, p.imie,p.nazwisko FROM lekarze l, pacjenci p, opieka o, specjalizacje s WHERE o.id_lekarz=l.id AND o.id_pacjent=p.id AND s.id=l.id_specjalizacja AND EXTRACT (YEAR FROM l.data_urodzenia)>1989

CREATE TABLE PRACOWNIK {

id_pracownik NUMBER(5) PRIMARY KEY,

imie VARCHAR2(30),

nazwisko VARCHAR2(30) };

CREATE TABLE KLIENT {

id_klient NUMBER(5) PRIMARY KEY,

imie VARCHAR2(30),

nazwisko VARCHAR2(30) };

CREATE TABLE SALA {

id_sala NUMBER(5) PRIMARY KEY

opis VARCHAR2(30)

ilosc_miejsc NUMBER(8)};

CREATE TABLE BILET{

id_bilet NUMBER(5) PRIMARY KEY,

id_pracownik NUMBER(5) references pracownik(id_pracownik),

id_klient NUMBER(5) references klient(id_klient),

data_wystawienia date};

CREATE TABLE POZYCJA_BILETU{

id_pozycja_biletu NUMBER(5) PRIMARY KEY,

id_bilet NUMBER(5) REFERENCES bilet(id_bilet),

id_sala NUMBER(5) references sala(id_sala),

id_seans NUMBER(5) references seans(id_seans)

rzad NUMBER(5),

kolumna number(5)};

CREATE TABLE SEANS {

id_seans NUMBER(5) PRIMARY KEY,

nazwa_filmu VARCHAR2(30),

rezyser VARCHAR2(30) } ;

A)

select imie,nazwisko,staz

FROM lekarze

WHERE nazwisko like '%ska'

AND staz>(SELECT avg(staz) FROM lekarze);

B)

SELECT p.imie,p.nazwisko,l.imie,l.nazwisko

FROM lekarze l, pacjenci p, opieka o

WHERE o.id_lekarz=l.id

AND o.id_pacjent=p.id

AND p.wiek>14;

C)

SELECT nazwa,liczba FROM pokoje,

(

SELECT id_pokoj numer,count(*) liczba

FROM pacjenci

GROUP BY id_pokoj

HAVING count(*)>2

)

WHERe pokoje.id=numer;

D)

SELECT nazwa,ilosc FROM specjalizacje,s

(

SELECT id_specjalizacja nazwa, count(*) ilosc

FROM lekarze

GROUP By id_specjalizacja

)

WHERE s.id=nazwa(+);

E)

CREATE OR REPLACE FUNCTION roznica AS

RETURN NuMBER;

minimalny lekarze.staz%TYPE;

maksymalny lekarze.staz%TYPE;

roz lekarze.staz%TYPE;

BEGIN

SELECT min(staz) INTO minimalny FROM lekarze;

SELECT max(staz) INTO maksymalny FROM lekarze;

roz:=maksymalny-minimalny;

return roz;

END;

SELECT roznica FROM dual;

F)

CREATE OR REPLACE procedura spr_lek

CURSOR cur AS SELECT * FROM lekarze FOR UPDATE;

wyj exception;

BEGIN

FOR tmp in cur LOOP

IF tmp.imie IS NULL THEN

RAISE wyj;

IF tmp.data_urodzenia>sysdate THEN

UPDATE lekarze SET data_urodzenia=sysdate where current of cur;

END LOOP;

EXCEPTION

WHEN wyj then

DBMS_OUTPUT.PUT_LINE('Blad');

END;

EXECUTE spr_lek;

G)

CREATE OR REPLACE TRIGGER wyzw

BEFORE INSERT ON pacjenci FOR EACH ROw

DECLARE

l_pokoj NUMBER(10);

BEGIN

SELECT count(*) INTO l_pokoj FROM pacjenci

WHERE id_pokoj=:NEW.id_pokoj;

GROUP BY id_pokoj

IF :NEW.wiek<zm THEN

RAISE_APPLICATION_ERROR(-20000,'Blad wieku');

END IF;

IF :new.id_pokoj>l_pokoj THEN

RAISE_APPLICATION_ERROR(-20001,'Blad pokoju');

END IF;

END;


Wyszukiwarka

Podobne podstrony:
przemyslowe kolos 1 id 405455 Nieznany
kolos 1
bezp kolos id 83333 Nieznany (2)
Kolos ekonimika zloz II 2 id 24 Nieznany
BOF kolos 2
Kolos Nano id 242184 Nieznany
Mathcad TW kolos 2
pytania na kolos z klinicznej, psychiatria i psychologia kliniczna
salicylany, V ROK, TOKSYKOLOGIA, notatki, kolos 1
Maszynoznawstwo ogolne, Automatyka i Robotyka, Semestr 1, Maszynoznastwo, kolos, ściągi
ćwiek -kolos spawalność (1), Studia, SEMESTR 5, MIZEISM, Kolokwium Ćwiek
Pytania ze sprawdzianow z satki, gik VI sem, GiK VI, SAT, kolos 1GS
Immunologia kolokwium 2 termin I, biologia, 3 semestr, immunologia, immuno kolos 2
stata kolos, statystyka matematyczna(1)
Materiały Kolowium Nauka o Państwie Kolos, Stosunki Międzynarodowe Rok 1, Semestr 1, Nauka o Państwi
hodowla kolos - wyklady, sem. 4, Hodowla roślin
automat tokarski, Automatyka i Robotyka, Semestr 5, ZMiSW, kolos lab
Gepdezja II kolos, geodezja
Kolos- sciaga, MOJE STUDIA Toksykologia i Mikrobiologia środowiska (Ochrona Środowiska - dzienne), G
kolos ogon, Uczelnia, Semestr V, V Semestr, 5 semestr, surowce org, ogon, downloadpart3

więcej podobnych podstron