poprawa kartkówek


Zad.1
select * from (select rownum licznik, emp.* from emp)
where
(licznik >= 2 and licznik<=4) or (licznik >= 6 and licznik<=8);


Zad. 2
//przekopiowac 10 pierwszy rekordow z tablicy A (nieposortowanych) a nastepnie
posortowac w drugiej tabeli

//kopiujemy nieposortwaną a następnie sortujemy ją
insert into b (a,b)
select a,b from (select rownum licznik, a,b from a) where licznik = 5 or licznik = 6 order by a;

//kopiujemy posortowaną wg kolumny a
insert into b (a,b)
select a,b from (select rownum licznik, a,b from (select a,b from a order by a)) where licznik = 5 or licznik = 6

Zad 3
update obliczenia set y = y + ((select avg(x) from obliczenia)/((select max(x) from obliczenia) + (select min(x) from obliczenia)));

Zad 4
//wypisac tylko te w tablicy A, ktorych nie ma w B

//wypisuje tylko te wiersze, ktore maja rozne wartosci w kolumnach
select a from t1 where a not in (select b from t1);

//rozwiazanie
select a,b from a where (a,b) not in (select a,b from b);


--------------------------------------------------------
--------------------------------------------------------
AREK
Zad.
Obliczenie pola koła metodą Monte Carlo

Rozwiazanie:
create or replace function mcarlo(r number) return number as

n number := 10000;
n_true number :=0;
x number;
y number;

begin

for k in 1..n loop
x := SYS.dbms_random.value(0,1)*2-1;
y := SYS.dbms_random.value(0,1)*2-1;

if(x*x+y*y<=1) then
n_true:=n_true +1;
end if;
end loop;

return 4*n_true/n*r*r;

end;

------------------------------------------------------
------------------------------------------------------
------------------------------------------------------

1. Stworzyć widok wyświetlający imie, nazwisko (pierwsze litery z dużej) studentów, których wiek jest większy od średniej wieku studentów i
urodzili się po 25-02-1940.


create or replace view v_Studenci as
select initcap(imie) IMIE, initcap(nazwisko) NAZWISKO from studenci
where floor(months_between(sysdate, data_urodzenia)/12) >
(select avg(floor(months_between(sysdate, data_urodzenia) /12)) from studenci)
and data_urodzenia >= to_date('25-02-1940', 'DD-MM-YYYY');

2. Wypisz niepowtrzających się studentów, który nie są absolwentami oraz studiują na co najmniej dwóch różynch wydziała. Wyniki ogranicz do 10 rekordów.

select * from
(
select distinct * from studenci st where
not exists(select * from absolwenci where pesel = st.pesel)
and (select count(*) from studenci where pesel = st.pesel) >=2
)
where rownum <=10;


3. Stwórz ograniczenie na pesel.

alter table studenci add
(
constraint ck_PESEL check (length(pesel)=11),
constraint un_PESEL unique (PESEL)
);

4. Usun studentów, którzy urodzili się w parzystym miesiącu

delete from studenci where
mod(to_number(to_char(data_urodzenia, 'MM')), 2) = 0;

------------------------------------------------------
------------------------------------------------------
------------------------------------------------------

1. Napisać funkcję silnia metodą iteracyjna..

create or replace
function silniaIter(liczba IN number default 1)
return number is

wyjatek exception;
wynik number := 1;

begin

if liczba<0 then
raise wyjatek;
end if;

for k in 1..liczba loop
wynik := wynik * k;
end loop;

return wynik;

exception
when wyjatek then
raise_application_error(-20000, 'Funkcja silnia nie może przyjmowac wartosci ujemnych');

end;

2. Napisz procedure obliczająca sinus z szeregu Taylora. Wykorzystać funkcję silni z poprzedniego zadania.

create or replace procedure sinus(n IN number, x IN number, wynik OUT number)
as

wynikTemp number := 0;
wyraz number;

zleN exception;

begin

if n<=0 then
raise zleN;
end if;


for i in 0..n loop
wyraz := ((power(-1, i))*((power(x, 2*i+1)/silniaiter(2*i+1))));
wynikTemp := wynikTemp + wyraz;
end loop;


wynik:=wynikTemp;
exception
when zleN then
dbms_output.put_line('Wartosc elementow szregu musi byc wieksza od 0');
when others then
dbms_output.put_line('Nieoczekiwany blad' || SQLERRM || ' kod PL/SQL ' || SQLCODE);
end;

3.

create table studenci
(
id_studenci number primary key,
imie varchar2(50),
nazwisko varchar2(100),
numer_indeksu number(5),
plec varchar2(1)
);

alter table studenci add (PESEL number(11));

4. Stwórz wyzwalacz, który w przypadku wstawienia studenta do tabeli bez podania płci przy podaniu PESELU zostanie dodana płeć do rekordu.

create or replace trigger t_Studenci_plec
before insert on Studenci
for each row
declare

ost varchar2(1);
plec varchar2(1);

begin
if inserting then
if :new.PESEL is not null then
ost := substr(:new.PESEL,10,1);

if (mod(ost,2)=0) then
:new.plec := 'K';
else
:new.plec := 'M';
end if;
end if;
end if;
end;

------------------------------------------------------
------------------------------------------------------
------------------------------------------------------

1. Stwórz procedure szyfrujacą wszystkie kolumny w tabeli podanej przez użytkownika parametrem
"nazwa_tabeli". Szyfrowanie XOR lub Cezara.
2. Stworzyć deszyfrowanie.
3. Oprogramować wyjątki.

Szyfrowanie:
create or replace
procedure szyfruj (nazwa_tabeli in varchar2) as
kursor sys_refcursor;
liczba_kolumn number;
opis_tabeli dbms_sql.desc_tab;
id_kursora number;
wartosc varchar2(4000);
wartosc_zaszyfrowana varchar2(4000);
dl number;
znak_n number;
wynik number;
klucz number:=2;
nazwa_tabeli_szyfr varchar2(250) := upper(nazwa_tabeli) || '_SZYFR';
polecenie varchar2(250);
czy_istnieje number;
begin
--otwarcie kursora
open kursor for 'SELECT * from ' || nazwa_tabeli;

--tworzenie tabeli z szyframi, sprawdzenie czy tablica z zaszyfrowanymi wartosciami istnieje, jeśli tak czyścimy ją
select count(*) into czy_istnieje from user_tables where table_name like nazwa_tabeli_szyfr;
if (czy_istnieje = 0) then
polecenie := 'create table ' || nazwa_tabeli_szyfr ||' as select * from ' || upper(nazwa_tabeli) || ' where 1!=1';
execute immediate polecenie;
else
polecenie := 'delete from ' || nazwa_tabeli_szyfr;
execute immediate polecenie;
end if;

--konwersja referencji kursora
id_kursora := dbms_sql.to_cursor_number(kursor);
--opisanie kursora
dbms_sql.describe_columns(id_kursora,liczba_kolumn,opis_tabeli);

--definiowanie kolumn z kursora
for i in 1..liczba_kolumn loop
dbms_sql.define_column(id_kursora,i,wartosc,4000);
end loop;
--pobranie wierszy z kursora
while dbms_sql.fetch_rows(id_kursora) > 0 loop
--polecenie uzupelniajace tabele z wartosciami zaszyfrowanymi
polecenie := 'insert into ' || nazwa_tabeli_szyfr || ' values (';

for i in 1..liczba_kolumn loop
--zwraca pojedynczą wartość w kolumnie
dbms_sql.column_value(id_kursora, i, wartosc);
--SZYFROWANIE
dl:=length(wartosc);
wartosc_zaszyfrowana:=null;

for i in 1..dl loop
znak_n:=ascii(substr(wartosc,i,1));
wynik:=bitxor(znak_n,klucz);
wartosc_zaszyfrowana:=wartosc_zaszyfrowana || chr(wynik);
end loop;

--SZYFROWANIE
polecenie := polecenie || '''' || wartosc_zaszyfrowana || '''';
--odzielenie wartości
if(i polecenie := polecenie || ', ';
end if;

end loop;

--wykonanie polecenia
polecenie := polecenie || ')';
execute immediate polecenie;
end loop;
--zamknięcie kursora
dbms_sql.close_cursor(id_kursora);
end;

Deszyfrowanie:
create or replace
procedure deszyfruj (nazwa_tabeli in varchar2) as
kursor sys_refcursor;
liczba_kolumn number;
opis_tabeli dbms_sql.desc_tab;
id_kursora number;
wartosc varchar2(4000);
wartosc_zaszyfrowana varchar2(4000);
dl number;
znak_n number;
wynik number;
klucz number:=2;
nazwa_tabeli_szyfr varchar2(250) := upper(nazwa_tabeli) || '_DESZYFR';
polecenie varchar2(250);
czy_istnieje number;
begin
--otwarcie kursora
open kursor for 'SELECT * from ' || nazwa_tabeli;
--tworzenie tabeli z szyframi, sprawdzenie czy tablica z zaszyfrowanymi wartosciami istnieje, jeśli tak czyścimy ją
select count(*) into czy_istnieje from user_tables where table_name like nazwa_tabeli_szyfr;
if (czy_istnieje = 0) then
polecenie := 'create table ' || nazwa_tabeli_szyfr ||' as select * from ' || upper(nazwa_tabeli) || ' where 1!=1';
execute immediate polecenie;
else
polecenie := 'delete from ' || nazwa_tabeli_szyfr;
execute immediate polecenie;
end if;
--konwersja referencji kursora
id_kursora := dbms_sql.to_cursor_number(kursor);
--opisanie kursora
dbms_sql.describe_columns(id_kursora,liczba_kolumn,opis_tabeli);
--definiowanie kolumn z kursora
for i in 1..liczba_kolumn loop
dbms_sql.define_column(id_kursora,i,wartosc,4000);
end loop;
--pobranie wierszy z kursora
while dbms_sql.fetch_rows(id_kursora) > 0 loop
--polecenie uzupelniajace tabele z wartosciami zaszyfrowanymi
polecenie := 'insert into ' || nazwa_tabeli_szyfr || ' values (';
for i in 1..liczba_kolumn loop
--zwraca pojedynczą wartość w kolumnie
dbms_sql.column_value(id_kursora, i, wartosc);
--SZYFROWANIE
dl:=length(wartosc);
wartosc_zaszyfrowana:=null;
for i in 1..dl loop
znak_n:=ascii(substr(wartosc,i,1));
wynik:=bitxor(znak_n,klucz);
wartosc_zaszyfrowana:=wartosc_zaszyfrowana || chr(wynik);
end loop;
--SZYFROWANIE
polecenie := polecenie || '''' || wartosc_zaszyfrowana || '''';
--odzielenie wartości
if(i polecenie := polecenie || ', ';
end if;
end loop;
--wykonanie polecenia
polecenie := polecenie || ')';
execute immediate polecenie;
end loop;
--zamknięcie kursora
dbms_sql.close_cursor(id_kursora);
end;

Wyszukiwarka

Podobne podstrony:
kartkowka 1 poprawa rozwiazanie
kartkowka 1 poprawa 2
POPRAWIONE RYSUNKI WAŁ A4
Dreamer Przebudzenie poprawki
kartkówka nr 4 rozwiazanie
poprawka 14 StockExchange
Cwiczenia poprawiajace stabilizacje, równowage i zakres ruchomosci
B2 Poprawność Gramatyczna
kartkowki klucz 1a
Spis hierarchiczny poprawny

więcej podobnych podstron