Co to jest transakcyjny SQL
Najprościej:
Transakcyjny SQL =
zdania języka operowania na
danych +
instrukcje sterujące
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.
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
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
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
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
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
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
)
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.
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
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
)