- 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álPříklad 5:
Use _Cocker
/* Tato proměnná je deklarovaná pouze pro tuto jednu dávku */
Declare @Popis varchar(50)
Select @Popis = ‘Ten pes se mně nelíbí’
Print @Popis
Print ‘Konec první dávky’
GO
/* Nastane chyba, protože proměnná @Popis není v této dávce deklarovaná*/
Print @Popis
Print ‘Konec druhé dávky’
GO
/* Tato dávka se již vykoná bez chyby
Print ‘Konec třetí dávky’
GO
Pokud by byly jednotlivé dávky mezi sebou závislé, všechno za místem výskytu poslední chyby by zhavarovalo – v tomto našem příkladě se však tak nestane. Třetí dávka není závislá na vykonání předchozích dvou dávek.
Dávku použijeme tehdy, pokud se má něco vykonat před ostatními částmi skriptu nebo mimo nich.
Pomocí dávek můžeme zajistit i potřebnou prioritu ve zpracování skriptů např. pokud se má před zahájením nějakého úkolu úplně dokončit jiný úkol.
Kurzorové tabulky
Kurzor představuje speciální způsob práce s daty množinového tvaru, při němž nepracujeme najednou s celou sadou záznamů, ale zpracováváme jeden záznam za druhým.
Kurzory mohou být implicitní nebo explicitní. Implicitní kurzory vytváří SQL Server sám pro svoji potřebu, tedy pro analýzu a vykonání SQL příkazů. Jsou automaticky vytvářeny pro příkaz SELECT, kde vracejí jen jednu hodnotu, nebo pro příkazy INSERT, UPDATE, DELETE, kde nevracejí žádnou hodnotu.
Explicitní kurzory deklaruje uživatel nebo programátor.
Přístup k údajům v databázové tabulce prostřednictvím kurzoru se skládá ze čtyř základních kroků:
Deklarace kurzoru
Otevření kurzoru
Výběr údajů prostřednictvím kurzoru
Zavření kurzoru
Deklarace kurzoru
Deklarace se skládá ze dvou částí – nejdříve deklarujeme jméno kurzoru a následně SQL dotaz:
declare Kurzor1 cursor for select * from majitel
Tato deklarace vytvoří kurzor s názvem Kurzor1 nad tabulkou majitel.
Otevření kurzoru
Od tohoto okamžiku jsou k dispozici údaje, které jsou výsledkem výběru SQL dotazu
open kurzor1
Výběr údajů prostřednictvím kurzoru
Pro výběr údajů slouží příkaz FETCH, který načítá údaj z kurzoru a uloží ho do proměnných. Po každém výběru údajů se kurzor automaticky přesune na následující záznam.
fetch next from kurzor1 into @Kid,@Kjm,@Kpr,@Kti
Zavření kurzoru
close Kurzor1
deallocate kurzor1
Obor platnosti
U kurzorů můžeme určit obor platnosti a to zda kurzor bude lokální (LOCAL) nebo globální (GLOBAL).
declare Kurzor1 cursor LOCAL for select * from majitel
eventuelně
declare Kurzor1 cursor GLOBAL for select * from majitel
Výchozí obor platnosti je globální. V praxi to znamená, že na globální kurzor, který jsme vytvořili např. v nějaké uložené proceduře se můžeme odvolávat i z ostatních uložených procedur.
Druhy kurzorů
Kurzory pouze vpřed – výchozí typ kurzoru, při jeho procházení máme pouze jedinou možnost a to příkazem FETCH NEXT se posunout na následující záznam.
declare Kurzor1 cursor for select * from majitel
open kurzor1
fetch next from kurzor1 into @Kid,@Kjm,@Kpr,@Kti
Kurzory rolovací – těmito kurzory můžeme libovolně přecházet mezi jednotlivými záznamy pomocí následujících parametrů:
NEXT – přechod na následující záznam
PRIOR – přechod na předchozí záznam
FIRST – přechod na první záznam
LAST – přechod na poslední záznam
declare Kurzor1 cursor scroll for select * from majitel
open kurzor1
fetch last from kurzor1 into @Kid,@Kjm,@Kpr,@Kti
Příklad 6
use _cocker
/* Vytvoření jednoduchého kurzoru - výpis dat z tabulky majitel po jednotlivých větách */
declare @Kid int
declare @Kjm varchar(15)
declare @Kpr varchar(20)
declare @Kti varchar(10)
declare Kurzor1 cursor for select * from majitel
open kurzor1
fetch next from kurzor1 into @Kid,@Kjm,@Kpr,@Kti
while @@fetch_status = 0
begin
print 'Identifikátor:'+ ' ' + cast(@Kid as varchar(5))
print 'Jméno:' + ' ' + @Kjm
print 'Příjmení:'+ ' ' + @Kpr
print 'Tituly:'+ ' ' + @Kti
print 'Hodnota systémové proměnné:' + ' ' + cast(@@fetch_status as varchar(1))
print ' '
fetch kurzor1 into @Kid,@Kjm,@Kpr,@Kti
end
close Kurzor1
deallocate kurzor1
/* Konec kurzoru */
Systémová funkce @@FETCH_STATUS se aktualizuje při každém načtení řádku a oznamuje nám jak načtení dopadlo. Možné vrácené hodnoty:
0: načtení proběhlo úspěšně
-1:operace načtení selhala, nacházíme se před prvním nebo za posledním záznamem kurzoru
-2:operace načtení selhala z důvodu chybějícího záznamu
Příklad 7
/* vytvoreni cvicne tabulky */
Use _Cocker
Delete from test
Create table test
(id integer not null,
jmeno varchar(10),
prijmeni varchar(15),
titul varchar(15))
go
/* Vytvoření jednoduchého kurzoru - vlozeni dat z tabulky majitel do cvičné tabulky test */
declare @Kid int
declare @Kjm varchar(15)
declare @Kpr varchar(20)
declare @Kti varchar(10)
declare Kurzor1 cursor for select * from majitel
open kurzor1
fetch next from kurzor1 int
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


