background image

 

 

Co to jest transakcyjny SQL

Najprościej:
Transakcyjny SQL = 

zdania języka operowania na 
danych +
instrukcje sterujące

background image

 

 

Po co transakcyjny SQL

Umożliwia przechowywanie w bazie 
danych nie tylko danych ale również:

1. Reguł biznesowych,
2. Reguł integralności niemożliwych do 

zapisana innymi sposobami,

3. Scentralizowanych procedur 

przetwarzania danych,

4. Funkcji.

background image

 

 

Cechy transakcyjnego SQL

1. W pełni funkcjonalny język programowania,
2. Brak interfejsu graficznego,
3. Polecenia specyficzne dla obsługi baz danych,
4. Brak narzędzi programistycznych 

(specjalizowany edytor, debugger),

5. Służy do programowania działań po stronie 

serwera,

6. Optymalizowany na szybkość wykonania kodu,
7. Niezbędny do zaprogramowania niektórych 

operacji

8. Wykorzystywany do kodowania funkcji 

użytkowników, procedur przechowywanych, 
triggerów

background image

 

 

Cechy transakcyjnego SQL

1. W pełni funkcjonalny język programowania,
2. Brak interfejsu graficznego,
3. Polecenia specyficzne dla obsługi baz danych,
4. Brak narzędzi programistycznych 

(specjalizowany edytor, debugger),

5. Służy do programowania działań po stronie 

serwera,

6. Optymalizowany na szybkość wykonania kodu,
7. Niezbędny do zaprogramowania niektórych 

operacji

8. Wykorzystywany do kodowania funkcji 

użytkowników, procedur przechowywanych, 
triggerów

background image

 

 

Elementy transakcyjnego SQL

1.

Zmienne takich samych typów jak pola 

w bazie danych

2.

Instrukcje sterujące: IF, FOR, WHILE

3.

Nawiasy logiczne BEGIN..END

4.

Możliwość deklarowania funkcji – 

funkcje zwracają wartość ale nie 

można wewnątrz nich wykonywać 

działań na bazie,

5.

Możliwość deklarowania procedur 

6.

Deklarowanie triggerów – procedur 

wykonywanych w reakcji na określone 

zdarzenia w bazie danych

background image

 

 

Przykład prostej funkcji

CREATE FUNCTION pierwsza_duza (@tekst varchar(50))
RETURNS varchar(50)
as  
BEGIN
declare @pierwszy_znak 

varchar(1)

declare @reszta

varchar(49) 

set @pierwszy_znak = upper(left(@tekst,1))
set @reszta = substring(@tekst, 2, len(@tekst)-1)
return @pierwszy_znak+ lower(@reszta)

END

Wywołanie:
select dbo.pierwsza_duza('ALABASTER')
WYNIK:
Alabaster

background image

 

 

Przykład prostej funkcji 2

create function aa(@x int,@y int) returns int
as
begin

declare @wynik int
if @x > @y 

begin

set @wynik = @x+@y

end

else

begin

set @wynik = @x-@y

end

return(@wynik)
end

background image

 

 

Przykład prostej procedury

create PROCEDURE generuj 

@ile int = 100

AS
DECLARE 

@i integer

DECLARE

@los varchar(20)

DECLARE 

@znak varchar(1)

set @i =1
while @i<@ile
begin
   set @los = replicate(char(rand()*65+33),round(rand()*20,0))
   insert into probna values(@los , null, null)
   set @i=@i+1
end

Wywołanie:
exec generuj 400
Sprawdzenie:
select * from probna

 create  table probna (
id_rek integer 
identity (1000,1),
tekst varchar(20),
liczba numeric (8,2),
random float

background image

 

 

Co to jest kursor?

Kursor można rozumieć jako połączenie 

dwóch elementów:

• Wybranego (zwykle niepustego) podzbioru 

wierzy danej tabeli lub widoku

• Wskaźnika pokazującego tzw. bieżący 

rekord

Kursory umożliwiają przetwarzanie informacji 

w trybie rekord-po-rekordzie. W 
przeciwieństwie do przetwarzania całych 
tabel tak jak w poleceniach UPDATE SQL-
a.

background image

 

 

Jak używać kursora?

1.

Kursor należy zadeklarować – do kursora 

wybieramy te wiersze i pola, które 

zamierzamy jakoś przetwarzać
DECLARE nazwa_kursora CURSOR
FOR SELECT zdanie _select
[FOR UPDATE OF lista_pol] 

2.

Kursor należy otworzyć 
OPEN nazwa_kursora

3.

Pobierać kolejne rekordy
FETCH nazwa_kursora INTO list_pol

4. Po użyciu kursor zamknąć i zniszczyć

CLOSE nazwa_kursor
DEALLOCATE nazwa_kursora

background image

 

 

Przykład użycia kursora

ALTER procedure wyp_liczby

@od_ilu int, @co_ile int

AS
BEGIN
declare @pom_liczba numeric
declare all_rec cursor for select liczba from probna for update of 

liczba

open all_rec
fetch all_rec into @pom_liczba
while @@FETCH_STATUS =0
begin

update probna set liczba = @od_ilu where current of all_rec
set @od_ilu = @od_ilu + @co_ile
print @od_ilu
fetch all_rec into @pom_liczba

end
close all_rec
deallocate all_rec
print '>>>>>>KONIEC<<<<<<'
end

 create  table probna (
id_rek integer 
identity (1000,1),
tekst varchar(20),
liczba numeric (8,2),
random float

background image

 

 


Document Outline