- Stahuj zápisky z přednášek a ostatní studijní materiály
- Zapisuj si jen kvalitní vyučující (obsáhlá databáze referencí)
- Nastav si své předměty a buď stále v obraze
- Zapoj se svojí aktivitou do soutěže o ceny
- Založ si svůj profil, aby tě tví spolužáci mohli najít
- Najdi své přátele podle místa kde bydlíš nebo školy kterou studuješ
- Diskutuj ve skupinách o tématech, které tě zajímají
Studijní materiály
Zjednodušená ukázka:
Stáhnout celý tento materiálo @Kid,@Kjm,@Kpr,@Kti
while @@fetch_status = 0
begin
insert into test values (@Kid,null,@Kpr,null)
fetch next from kurzor1 into @Kid,@Kjm,@Kpr,@Kti
end
close Kurzor1
deallocate kurzor1
select * from test
/* Konec kurzoru */
Transakce
Pomocí transakcí nám databázový server umožní zachovávat v každém okamžiku konzistenci údajů v databázových tabulkách a nedělitelnost vykonávaných změn – buď všechno nebo nic.
Představme si situaci převodu peněz v peněžním ústavu z účtu klienta A na účet klienta B. Zjednodušeně lze zapsat:
Update ucty set zůstatek=zůstatek-10000 where jmeno=’Klient A’
Update ucty set zůstatek=zůstatek+10000 where jmeno=’Klient B’
V případě, že mezitím klient B účet zrušil, nebo klient A se přepsal v čísle účtu odejdou peníze neznámo kam….
Abychom tomu zamezili můžeme s výhodou vzužít transakcí. Transakce totiž buď proběhne jako celek, nebo se transakce zruší a vrátí se zpět původní hodnoty.
Průběh transakce řídíme následujícími příkazy:
BEGIN TRANSACTION – zahájení transakce
COMMIT – potvrzení platnosti transakce
ROLLBACK – zruší všechny změny které dosud v transakci proběhly
Cvičná tabulka pro transakce
CREATE TABLE zakaznici
(
id_zak int NOT NULL,
firma varchar(20) NOT NULL,
kontakt_jmeno varchar(20),
adresa varchar(20),
mesto varchar(15),
obrat money,
dluh money
)
INSERT INTO zakaznici
VALUES(1, 'Procesory s.r.o', 'Vonasek Jiri', 'Volkrova 12', 'Praha', 2567892.30, 365000);
INSERT INTO zakaznici
VALUES (2,'Šroubky a.s', 'Kucera Jan', 'Zaoralova 16', 'Brno', 753275.65, 100000);
INSERT INTO zakaznici
VALUES (3,'Kadeřnictví', 'Chocholousek Libor', 'Dolni 654', 'Uhersky Brod', 212356.20, 0);
INSERT INTO zakaznici
VALUES (4,'Vodárny a.s', 'Krupickova Alena', 'Zelena 4', 'Rajhrad', 6256120.45, 40000);
INSERT INTO zakaznici
VALUES (5,'Cocker a synove', 'Cocker Budy', 'Nadrazni 333', 'Brno', 57210, 920000)
Příklad 8
Jednoduchá transakce, kterou odvoláme sami z Query Analyzeru. Zákazníkům v tabulce zakaznici odpustíme 5 procent z dluhu.
Select firma, dluh from zakaznici
BEGIN TRAN T1;
UPDATE zakaznici SET dluh = 0.95 * dluh;
Select firma, dluh from zakaznici
Tuto naši akci nyní můžeme odvolat jednoduše tak, že transakci zrušíme
ROLLBACK TRAN T1
Vytvoření návratových bodů transakce
V některých případech nechceme odvolávat celou provedenou transakci ale pouze její určitou část. V takových případech můžeme na důležitých místech transakce vytvořit tzv. záložky.
Syntaxe: SAVE TRAN
Příklad 9
Nejdříve si z naší tabulky vybereme zákazníky, kteří mají dluh vyšší jak 50.000.-Kč. Těmto zákazníkům přičteme jako sankci k dluhu 3 procenta.
BEGIN TRAN T1;
UPDATE zakaznici SET dluh = 1.03 * dluh WHERE dluh > 50000;
SELECT firma, dluh FROM zakaznici;
Takto získané prostředky použijeme pro snížení dluhu všem zákazníkům o jedno procento. Vzhledem k tomu, že tuto akci nemá náš vedoucí schválenou majitelem použijeme pro tento případ záložku, kdybychom museli tuto akci zrušit.
SAVE TRAN pred_akci;
UPDATE zakaznici SET dluh = 0.99 * dluh;
Majitel rozhodl, že peníze využije jinak a nic se již dále snižovat nebude. Pokud bychom v tomto případě použili příkaz ROLLBACK zrušili bychom všechny změny. Zrušíme tedy pouze operace vykonané po záložce pred_akci.
ROLLBACK TRAN pred_akci;
SELECT firma, dluh FROM zakaznici;
Nyní je vše OK, sankce zůstaly uplatněny a odpuštění dluhů jsme zrušili. Můžeme provést potvrzení transakce.
COMMIT TRAN T1
Procedurální nadstavby jazyka SQL
Prozatím jsme byli při vykonávání příkazů omezeni sekvenčním zpracováním bez možnosti použít klasických programátorských konstrukcí – cykly, podmínky, využití procedur, funkcí apod.
Z těchto důvodů má každá moderní databázová platforma implementované určité procedurální rozšíření jazyka SQL. U MS SQL Serveru má název Transact SQL (T-SQL). Používá se pro tvorbu aplikační logiky, uložených procedur a spouští za účelem vytvoření a naplnění tabulek, provádění různých výpočtů, statistik apod.
Řízení toku příkazů
Některé bloky příkazů budeme vykonávat v cyklech, jiné za určitých podmínek. Blok příkazů je v jazyce T-SQL ohraničený pomocí klíčových slov BEGIN a END.
BEGIN
příkaz 1
příkaz 2
..
..
END
Podmínka IF..ELSE
Základní programovou konstrukcí pro tvorbu podmínek je IF..ELSE. Jednotlivé bloky jsou ohraničeny pomocí BEGIN ..END.
IF
BEGIN
(blok příkazů)
END
ELSE IF
BEGIN
(blok příkazů)
END
ELSE
BEGIN
(blok příkazů)
END
Příklad 10
Declare @dluh money
Set @dluh=10000
If (@dluh>=8000)
Begin
Print ‘Překročili jste povolený rozsah’
End
Cyklus WHILE
V jazyce T-SQL se používá pro programování cyklů.
WHILE
Begin
(příkazy)
End
Příklad 11
Následující cyklus se vykonává do té doby, až je splněna podmínka za příkazem WHILE.
Declare @poc int
Set @poc=1
While (@poc
Vloženo: 22.04.2009
Velikost: 118,50 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Mohlo by tě zajímat:
Skupina předmětu DBS - Databázové systémy
Reference vyučujících předmětu DBS - Databázové systémy
Podobné materiály
Copyright 2025 unium.cz


