| Materie: | Subiecte rezolvate- Baze de date |
| Categorie: | Fituici |
| Universitatea: | Universitatea de Vest - Timisoara |
| Facultatea: | Facultatea Matematica si Informatica |
| Domeniu: | Informatica |
| Profesor(i): | Petrov |
| Descriere: |
Numele ÅŸi prenumele:
Se consideră tabelele, care au costrângerile definite mai jos (CP- cheie primară, CS – cheie stăină, CU – cheie unică, NN nenul):
PROGRAMA ANALITICA
Tip disciplină C 1 cu valorile posibile: O – obligatorie, A – optională (la alegere), F – facultativă
Cod disciplină N 3 CP, se alocă secvenţial
Denumire disciplină C 20 NN
Facultate C 1 CP, cu una din valorile: M – matematică şi informatică, F – fizică, C – Chimie, E – ştiinţe economice
Specializare C 1 CP, cu una din valorile: M –matematică, I – informatică, F – fizică, C – Chimie, M – management, C – contabilitate, T – Turism, B – finanţe şi bănci, K - marketing
An de studii C 1 CP, cu una din valorile: 1, 2, 3
Forma de şcolarizare C 1 CP, cu una din valorile: Z – zi, S – seral, D – la distanţă
Nr. ore curs pe săpt N 1 pozitivă
Nr. ore seminar/lab pe săpt N 1 pozitivă
Formă de verificare C 1 cu una din valorile: E – examen, C – colocviu, P – proiect
STUDENTI
Index N 4 CP, alocat secvenţial
Nume C 20 NN, CU
Facultate C 1 CS
Specializare C 1 CS
An de studii C 1 CS
Forma de scolarizare C 1 CS
Statut C 15 cu una din valorile: PROMOVAT, RESTANTIER, EXMATRICULAT, ABSOLVENT
Medie1 N 5,2
Medie2 N 5,2
Medie3 N 5,2
REZULTATE
Index N 4 CS
Cod disciplină N 3 CS
Notă N 5,2 pozitiv
Data1 D implicit data curentă
Data2 D
Data3 D
Se cere:
1. Creaţi tabelele descrise mai sus în conformitate cu constrângerile specificate;
create table programa_analitica(
tip_disciplina varchar2(1),
cod_disciplina number(3),
denumire_disciplina varchar2(20) not null,
facultate varchar2(1) ,
specializare varchar2(1) ,
an_studii varchar2(1) ,
forma_scolarizare varchar2(1) ,
ore_curs number(1),
ore_sem number(1),
forma_verif varchar2(1)
, constraint programa_analitica_pk primary key
(
cod_disciplina,
facultate,
specializare,
an_studii,
forma_scolarizare
),
constraint programa_ck_tip check(tip_disciplina in ('O','A','F')) enable,
constraint progr_ck_facultate check(facultate in ('M','F','C','E'))enable,
constraint progra_ck_spec check(specializare in ('M','I','F','C','M','C','T','B','K')) enable,
constraint progra_ck_an check(an_studii in ('1','2','3')) enable,
constraint progra_ck_forma_scol check(forma_scolarizare in ('Z','S','D')) enable,
constraint progra_ck_ore check(ore_curs>0) enable,
constraint progra_ck_orsem check(ore_sem>0) enable,
constraint progra_ck_forma check(forma_verif in('E','C','P')) enable
);
Table created.
create table studenti(
indexx number(4),
nume varchar2(20) not null,
facultate varchar2(1),
specializare varchar2(1),
an_studii varchar2(1),
forma_scolarizare varchar2(1),
statut varchar2(15) constraint statut_ck check (statut in (‘promovat', 'restantier', 'exmatriculat', 'absolvent')),
medie1 number(5,2),
medie2 number(5,2),
medie3 number(5,2),
constraint stud_pk_indexx primary key(indexx),
constraint stud_uk_nume unique(nume),
constraint studenti_fk foreign key (
facultate,
specializare,
an_studii,
forma_scolarizare
) references programa_analitica(facultate, specializare,an_studii,forma_scolarizare)
);
Table created.
create table rezultate
(
indexx number(4),
cod_disciplina number(3),
nota number(5,2),
data1 date default sysdate,
data2 date,
data3 date,
constraint rez_ck_not check(nota>0),
constraint indexx_fk foreign key (indexx) references studenti(indexx)
);
Table created.
2. Construiţi secvenţele necesare controlului introducerii datelor în tabelele de mai sus având în vedere următoarele cerinţe:
a. Secvenţa pentru controlul indexului studentului începe de la 100, cu pasul 1 şi nu este ciclică;
b. Secvenţa pentru controlul codului disciplinei începe de la 1, are pasul 1 şi valoarea maximă 500.
a. create sequence studenti_indexx
increment by 1
start with 100
nocycle;
Sequence created.
b. create sequence prog_analitica
increment by 1
start with 1
maxvalue 500;
Sequence created.
3. Verificaţi în conţinutul dicţionarului de date toate obiectele ce au fost generate prin construcţiile de la punctele precedente şi afişaţi structurile tabelelor construite.
select * from user_tables where table_name in ('programa_analitica', 'studenti', 'rezultate');
describe programa_analitica;
describe studenti;
describe rezultate;
Name Null Type
------------------------------ -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TIP_DISCIPLINA VARCHAR2(1)
COD_DISCIPLINA NUMBER(3)
DENUMIRE_DISCIPLINA NOT NULL VARCHAR2(20)
FACULTATE NOT NULL VARCHAR2(1)
SPECIALIZARE NOT NULL VARCHAR2(1)
AN_STUDII NOT NULL VARCHAR2(1)
FORMA_SCOLARIZARE NOT NULL VARCHAR2(4000)
ORE_CURS NUMBER(1)
ORE_SEM NUMBER(1)
FORMA_VERIF VARCHAR2(1)
10 rows selected
Name Null Type
------------------------------ -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INDEXX NOT NULL NUMBER(4)
NUME NOT NULL VARCHAR2(20)
FACULTATE VARCHAR2(1)
SPECIALIZARE VARCHAR2(1)
AN_STUDII VARCHAR2(1)
FORMA_SCOLARIZARE VARCHAR2(1)
STATUT VARCHAR2(15)
MEDIE1 NUMBER(5,2)
MEDIE2 NUMBER(5,2)
MEDIE3 NUMBER(5,2)
10 rows selected
Name Null Type
------------------------------ -------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INDEXX NUMBER(4)
COD_DISCIPLINA NUMBER(3)
NOTA NUMBER(5,2)
DATA1 DATE
DATA2 DATE
DATA3 DATE
6 rows selected
4. Introduceţi în tabele înregistrări coerente şi inteligibile astfel: 3 studenti la 3 specializări în 3 ani de studiu, 4 discipline la 3 specializări din 3 ani de studiu, rezultatele la fiecare disciplină şi afişaţi conţinutul tabelelor. Nu se completează coloanele: statut, medie1, medie2, medie3, data2, data3.
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('O',prog_analitica.nextval,'Matematica','M','M','1','Z',2,2,'E');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('O',prog_analitica.nextval,'Matematica','M','I','2','Z',2,2,'E');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('O',prog_analitica.nextval,'Matematica','M','C','3','Z',2,2,'C');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('O',prog_analitica.nextval,'Algoritmica','M','M','1','S',2,1,'P');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('O',prog_analitica.nextval,'Algoritmica','M','F','2','S',2,1,'P');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('O',prog_analitica.nextval,'Algoritmica','E','K','3','S',2,1,'P');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('A',prog_analitica.nextval,'Algoritmica','F','F','1','D',4,2,'C');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('A',prog_analitica.nextval,'Algoritmica','M','F','2','Z',4,2,'E');
insert into programa_analitica (tip_disciplina,cod_disciplina,denumire_disciplina,facultate,specializare,an_studii,forma_scolarizare,ore_curs,ore_sem,forma_verif)
values ('A',prog_analitica.nextval,'Algoritmica','E','T','3','D',2,1,'P');
insert into studenti(indexx,nume,facultate,specializare,an_studii,forma_scolarizare)
values (studenti_indexx.nextval,'Popescu','M','M','1','Z');
insert into rezultate (indexx,cod_disciplina,nota)
values(studenti_indexx.currval,1,9);
insert into studenti(indexx,nume,facultate,specializare,an_studii,forma_scolarizare)
values (studenti_indexx.nextval,'Nastase','M','I','2','Z');
insert into rezultate (indexx,cod_disciplina,nota)
values(studenti_indexx.currval,2,8);
insert into studenti(indexx,nume,facultate,specializare,an_studii,forma_scolarizare)
values (studenti_indexx.nextval,'Ionescu','M','C','3','Z');
insert into rezultate (indexx,cod_disciplina,nota)
values(studenti_indexx.currval,3,10);
insert into studenti(indexx,nume,facultate,specializare,an_studii,forma_scolarizare)
values (studenti_indexx.nextval,'Prunea','M','M','1','S');
insert into rezultate (indexx,cod_disciplina,nota)
values(studenti_indexx.currval,4,6);
insert into studenti(indexx,nume,facultate,specializare,an_studii,forma_scolarizare)
values (studenti_indexx.nextval,'Coltis','M','F','2','S');
insert into rezultate (indexx,cod_disciplina,nota)
values(studenti_indexx.currval,5,6);
insert into studenti(indexx,nume,facultate,specializare,an_studii,forma_scolarizare)
values (studenti_indexx.nextval,'Catrinoiu','E','K','3','S');
insert into rezultate (indexx,cod_disciplina,nota)
values(studenti_indexx.currval,6,4);
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
select * from programa_analitica;
select * from rezultate;
select * from studenti;
T COD_DISCIPLINA DENUMIRE_DISCIPLINA F S A F ORE_CURS ORE_SEM F
- -------------- -------------------- - - - - ---------- ---------- -
O 1 Matematica M M 1 Z 2 2 E
O 2 Matematica M I 2 Z 2 2 E
O 3 Matematica M C 3 Z 2 2 C
O 4 Algoritmica M M 1 S 2 1 P
O 5 Algoritmica M F 2 S 2 1 P
O 6 Algoritmica E K 3 S 2 1 P
A 7 Algoritmica F F 1 D 4 2 C
A 8 Algoritmica M F 2 Z 4 2 E
A 9 Algoritmica E T 3 D 2 1 P
9 rows selected.
INDEXX COD_DISCIPLINA NOTA DATA1 DATA2 DATA3
---------- -------------- ---------- --------- --------- ---------
100 1 9 19-JAN-08
101 2 8 19-JAN-08
102 3 10 19-JAN-08
103 4 6 19-JAN-08
104 5 6 19-JAN-08
105 6 4 19-JAN-08
6 rows selected.
INDEXX NUME F S A F STATUT MEDIE1 MEDIE2 MEDIE3
---------- -------------------- - - - - --------------- ---------- ---------- ----------
100 Popescu M M 1 Z
101 Nastase M I 2 Z
102 Ionescu M C 3 Z
103 Prunea M M 1 S
104 Coltis M F 2 S
105 Catrinoiu E K 3 S
6 rows selected.
5. Creaţi o structură de utilizatori, organizaţi în 4 roluri care să aibă următoarele drepturi de acces asupra bazei de date:
a. Rolul ADAUGARE – adăugare de înregistrări în baza de date;
b. Rolul MODIFICARE – modificarea înregistrărilor existente în baza de date;
c. Rolul STERGERE – ştergerea înregistrărilor din baza de date;
d. Rolul CONSULTARE – consultarea înregistrărilor din baza de date.
Verificaţi rolurile şi utilizatorii în dicţionarul de date.
a. create role adauga;
b. create role modifica;
c. create role sterge;
d. create role consulta;
Role created.
Role created.
Role created.
Role created.
grant insert on programa_analitica to adauga;
grant insert on rezultate to adauga;
grant insert on studenti to adauga;
grant update on programa_analitica to modifica;
grant update on rezultate to modifica;
grant update on studenti to modifica;
grant delete on programa_analitica to sterge;
grant delete on rezultate to sterge;
grant delete on studenti to sterge;
grant select on programa_analitica to consulta;
grant select on rezultate to consulta;
grant select on studenti to consulta;
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
GRANT create session to consulta;
GRANT create sequence to consulta;
GRANT create session to adauga;
GRANT create sequence to adauga;
GRANT create session to modifica;
GRANT create sequence to modifica;
GRANT create session to sterge;
GRANT create sequence to sterge;
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
create user user1 identified by parola;
create user user2 identified by parola;
create user user3 identified by parola;
create user user4 identified by parola;
User created.
User created.
User created.
User created.
grant adauga to user1;
grant modifica to user2;
grant sterge to user3;
grant consulta to user4;
Grant succeeded.
Grant succeeded.
Grant succeeded.
Grant succeeded.
6. Folosiţi un utilizator din rolul ADAUGARE şi verificaţi acţiunile acestuia asupra bazei de date aplicând succesiv comenzile INSERT, UPDATE, DROP, SELECT. Ce observaţi?
connect user1/parola;
Connected.
Ma conectez la baza de date cu user-ul care l-am creat anterior user1 cu rolul ‘adauga’.
Obs: Nu am drepturi decat pentru operatiile asupra carora i-au fost acordate drepturi. (INSERT)
Daca incearc alte operatii decat cele permise atunci imi va afisa eroarea:
SQL Error: ORA-01031: insufficient privileges
7. Folosiţi un utilizator din rolul MODIFICARE şi verificaţi acţiunile acestuia asupra bazei de date aplicând succesiv comenzile INSERT, UPDATE, DROP, SELECT. Ce observaţi?
Ma conectez la baza de date cu user-ul user2 care are rolul ‘modifica’.
Obs: Nu am drepturi decat pentrut operatiile asupra carora i-au fost acordate drepturi. (UPDATE)
Daca incearc alte operatii decat cele permise atunci imi va afisa eroarea:
SQL Error: ORA-01031: insufficient privileges
8. Folosiţi un utilizator din rolul STERGERE şi verificaţi acţiunile acestuia asupra bazei de date aplicând succesiv comenzile INSERT, UPDATE, DROP, SELECT. Ce observaţi?
Ma conectez la baza de date cu user-ul user3 care are rolul ‘sterge’.
Obs: Nu am drepturi decat pentru operatiile asupra carora i-au fost acordate drepturi. (DROP) Daca incearc alte operatii decat cele permise atunci imi va afisa eroarea:
SQL Error: ORA-01031: insufficient privileges
9. Folosiţi un utilizator din rolul CONSULTARE şi verificaţi acţiunile acestuia asupra bazei de date aplicând succesiv comenzile INSERT, UPDATE, DROP, SELECT. Ce observaţi?
Ne conectam la baza de date cu user-ul user1 care are rolul ‘consulta’.
Obs: Nu am drepturi decat pentru operatiile asupra carora i-au fost acordate drepturi. (SELECT) Daca incearc alte operatii decat cele permise atunci imi va afisa eroarea:
SQL Error: ORA-01031: insufficient privileges
10. Inscrieţi statusul pentru studenţii ale căror rezultate le-aţi înregistrat având în vedere următoarele:
a. Se consideră PROMOVAT un student care are nota cel puţin 5 la toate disciplinele din planul de învăţământ al anului de studii din care face parte;
b. Se consideră RESTANTIER un student care are nota sub 5 la 2 discipline din planul de învăţământ al anului de studii din care face parte;
c. Se consideră EXMATRICULAT un student care are nota sub 5 la 3 discipline din planul de învăţământ al anului de studii din care face parte.
Afişaţi conţinutul tabelei STUDENTI.
11. Pentru toţi studenţii promovaţi calculaţi media anului de studii. Dacă studenţii sunt în anul 3 la status se înscrie ABSOLVENT. Afişaţi conţinutul tabelei STUDENTI.
12. Creaţi vederi care să conţină următoarele informaţii:
a. Numele studentului, Denumirea disciplinei, Nota, pentru toţi studenţii restanţieri;
b. Numele studentului, Numărul de discipline cu nota sub 5, pentru toţi studenţii exmatriculaţi.
c. Numele studentului, Media1, Media2, Media3, Media generală, pentru toţi absolvenţii.
a. create view stud_rest as
select nume s ,denumire_disciplina p, nota r
from studenti s join
( rezultate r join programa_analitica p
on r.cod_disciplina=p.cod_disciplina)
on r.indexx=s.indexx where s.statut='restantier';
View created.
b. create view stud_exmatr as
select nume s ,nota r
from studenti s join rezultate r
on s.indexx=r.indexx
where nota<5 and statut='exmatriculat';
View created.
c. create view stud_toti as
select nume, medie1, medie2, medie3
from STUDENTI;
View created.
13. Verificaţi înscrierea vederilor în dicţionarul de date şi afişaţi structura şi conţinutul acestora.
select * from stud_rest;
no rows selected
select * from stud_exmatr;
no rows selected
select * from stud_toti;
NUME MEDIE1 MEDIE2 MEDIE3
-------------------- ---------- ---------- ----------
Popescu
Nastase
Ionescu
Prunea
Coltis
Catrinoiu
6 rows selected.
14. Construiţi rapoartele care să conţină următoarele informaţii:
a. Numele studentului şi lista disciplinelor la care are restanţă, pentru toţi restnţierii;
b. Numele studentului, Anul de studii, Status, în ordinea statusului;
c. Nume student, An de studii, Denumire disciplină, Nota, pentru toţi studenţii absolvenţi.
Rapoartele astfel construite vor fi puse în pagină prin comenzile specifice, atribuind fiecărui raport un titlu.
15. Actualizaţi rezultatele pentru studenţii restanţieri atribuind la o parte dintre aceştia la disciplinele la care au restanţe note peste 5 şi actualizând totodată data. Afişaţi conţinutul tabelei REZULTATE.
16. Afişaţi un raport care să conţină doar studenţii care au promovat în sesiunea a doua, indicând datele examinărilor şi statusul studenţilor.
set pagesize 40
set linesize 100
set feedback off
ttitle 'Studenti promovati|in sesiunea a II-a'
column nume heading 'Nume' format a15
column statut heading 'Statut' format a15
column data1 heading 'Data1' format a15
column data2 heading 'Data2' format a15
rem ** comanda select
select nume, statut, data1, data2
from studenti natural join rezultate
where indexx in(select cod_disciplina from rezultate)
order by nume
/
NOTA : Toate subiectele sunt obligatorii. Start : 2 pct. Se obţin 0.5 pct. pentru fiecare răspuns corect. Acest fişier se completează cu răspunsurile la fiecare dintre subiecte, imediat după enunţul subiectului, aranjate structurat, precum şi rezultatul rulării. Răspunsurile vor avea acelaşi font ca şi textul în contextul căruia se inserează şi vor fi îngroşate, iar rezultatul rulării de asemenea, va avea acelaşi font ca şi textul în contextul căruia se inserează şi va fi înclinat. De asemenea, comenzile vor fi stocate într-un fişier de tip TXT (script) prin a cărui execuţie trebuie să se obţină toate rezultatele cerute. De la punctul în care se întrerupe execuţia scriptului subiectele rezolvate nu sunt notate. Punctele de start se obţin doar dacă se respectă condiţiile impuse pentru rezolvare. Răspunsurile se trimit prin email la adresa : gpetrovi2@yahoo.com. Fişierul cu subiectele rezolvate va avea numele SUBIECT_XX, unde XX reprezintă numărul subiectului, iar scriptul pentru verificare va avea numele Dv. Timp de răspuns 24 de ore din momentul transmiterii subiectelor pe e-mail.
|
| Document: |
1262989739_complexvirtual_ro_Subiecterezolvate-Testde24ore-Petrov.rar |
| Downloads: | 22 |
| Actiuni: |
Nota: Pentru a descarca acest fisier trebuie sa fiti autentificat
|
|
|
|