Professional Documents
Culture Documents
• nie mogą mieć parametrów (ale mogą zapisywać dane w tabelach tymczasowych)
• nie mogą zatwierdzać transakcji (COMMIT) ani ich wycofywać (ROLLBACK)
ponieważ działają w kontekście instrukcji SQL, która spowodowała ich uruchomienie
• mogą generować dodatkowe błędy, jeżeli są źle napisane.
PLIKI WSADOWE
Plik wsadowy jest zbiorem poleceń T-SQL (zadań wsadowych) interpretowanych przez SQL
Server jako całość. Polecenia są zgrupowane razem a polecenie GO oznacza koniec pliku
wsadowego. Następujący przykład pokazuje zadanie wsadowe.
USE EWYP_AUT;
BEGIN TRAN;
CREATE TABLE STANOWISKA (stanowisko char(15), wykaz_obowiazkow char(50));
INSERT INTO stanowiska (stanowisko) SELECT DISTINCT stanowisko FROM
pracownicy;
SELECT DISTINCT stanowisko FROM pracownicy ;
COMMIT TRAN;
GO
Jeżeli wystąpi błąd w składni w dowolnym miejscu zadania (polecenia) wsadowego, całe
zadanie jest usuwane (wyjątki !!!)
Niektóre polecenia mogą być usuwane w pliku wsadowym, podczas gdy dla innych nie jest to
możliwe.
Następujące polecenia CREATE mogą być połączone w pojedynczym pliku wsadowym:
CREATE DATABASE
CREATE TABLE
CREATE INDEX
Następujące polecenia nie mogą być łączone z innymi w tym samym pliku wsadowym:
CREATE TRIGGER
CREATE PROCEDURE
CREATE VIEW
Korzystając z zadań wsadowych należy mieć na uwadze jeszcze kilka innych kwestii. Zadanie
wsadowe jest poddawane : przetwarzaniu, analizie składniowej, optymalizowane,
kompilowane a następnie
wykonywane.
Skrypty
Skrypt jest zbiorem złożonym z jednego lub więcej zadań wsadowych, które są zapisywane
jako grupa. Skrypty są wykonywane na ogół jako część pewnej jednostki pracy, która ma
zostać zrealizowana, jak
np.: ładowanie lub konserwacja danych.
USE Ewyp_aut
BEGIN TRAN
SELECT * INTO wyp_01 FROM wyp WHERE data_odd<’01/01/2001’;
DELETE FROM wyp WHERE data_odd<’01/01/2001’;
COMMIT TRAN;
GO
BEGIN TRAN
SELECT * INTO klienci_01 FROM klienci WHERE nr_klienta not in (SELECT nr_klienta
from wyp
where data_wyp>’01/01/2001’);
DELETE FROM klienci where nr_klienta not in (SELECT nr_klienta from wyp where
data_wyp>’01/01/2001’);
COMMIT TRAN;
GO
ELEMENTY JĘZYKA KONTROLI PRZEPŁYWU
Jeżeli zadanie wsadowe z wieloma poleceniami jest wysyłane do SQL Servera do wykonania,
polecenia są wykonywane w kolejności, w jakiej zostały podane. Język T-SQL dostarcza
kilku poleceń, które pozwalają na zmianę kolejności wykonywania poleceń w pliku
wsadowym. Są one szczególnie przydatne
w transakcjach, procedurach wyzwalanych, funkcjach i procedurach składowanych.
Blok BEGIN...END
Niektóre z poleceń kontroli przepływu jakie zostaną omówione będą wymagały pojedynczego
polecenia jako części swojej składni. Wszędzie gdzie oczekiwane jest pojedyncze polecenie,
można używać tego pojedynczego polecenia. Jeżeli zajdzie potrzeba, aby wiele poleceń było
wykonywanych razem, należy zamknąć je pomiędzy słowami kluczowymi BEGIN i END.
Konstrukcja ta zostanie wykorzystana w kolejnych przykładach.
Polecenie PRINT
Polecenie WHILE
PROCEDURY SKŁADOWANE
Procedury składowane uruchamia się przy użyciu instrukcji EXECUTE razem z nazwą
procedury i parametrami Poniższa instrukcja uruchamia procedurę składowaną wyp2003,
która wymienia wypożyczenia przechowywane w bazie wypożyczenia
EXEC wyp2003
GO
Poniższy kod tworzy procedurę składowaną, która podnosi pensję pracownika zgodnie z
danymi zawartymi w zmiennych @z_dzial, @z_wysokosc
CREATE PROCEDURE podwyzka @z_dzial varchar(20), @z_wysokosc integer
AS
UPDATE pracownicy SET pracownicy.pensja=pracownicy.pensja+@z_wysokosc
WHERE pracownicy.dzial=@z_dzial;
Poniższe instrukcje uruchamiają procedurę składowaną podwyzka
USE Ewyp_aut
EXEC podwyzka 'TECHNICZNY' ,20
GO
USE Ewyp_aut
EXEC podwyzka @z_dzial= 'TECHNICZNY' , @z_wysokosc =20
GO
Ważną własnością SQL Servera 2005 jest możliwość definiowania przez użytkownika
własnych funkcji (User-Defined-Functions) których wartością może być skalar (tekst, data)
jak i tabela. Definiowane funkcje przez użytkownika mogą zależeć od wielu parametrów
(zmiennych). Klauzula RETURNS w definiowanych funkcjach decyduje czy zwracana jest
pojedyncza wartość czy też tabela.
Można wyróżnić dwa typy definicji funkcji UDF której wartością jest tabela:
- zwracana tabela jest wynikiem pojedynczego polecenia Select; wtedy nazwy kolumn i ich
typy są zdeterminowane przez polecenie Select (funkcja typu inline).
- definicja funkcji zawiera : określenie struktury tabeli wynikowej oraz wstawienie do niej
określonych rekordów. Określenie tego typu funkcji daje większą swobodę w jej
definiowaniu (funkcje typu multistatement)
Definicje funkcji typu multistatemen mogą zawierać następujące polecenia:
- przypisania
- polecenia kontroli przepływu
- operacje na kursorach
- polecenia deklarowania zmiennych
-polecenia INSERT, UPDATE, DELETE
- polecenia SET/SELECT, używane do przypisania wartości do zmiennych lokalnych
Najprostsze w budowaniu są funkcje skalarne. Podstawowa składnia w tym przypadku jest
następująca:
CREATE FUNCTION nazwa_użytkownika.nazwa funkcji
(par1_nzwa typ1, par2_nazwa typ2)
RETURNS wart_nazwa typ
Treść definiująca zwracaną wartość
RETURN wart_nazwa
CREATE FUNCTION CALKA_N (
@K_LEWY DECIMAL(16,10) ,@K_PRAWY DECIMAL(16,10))
RETURNS DECIMAL(16,10)
AS
BEGIN
DECLARE @WYNIK DECIMAL(16,10)
DECLARE @PUNKT DECIMAL(16,10)
SET @PUNKT=@K_LEWY
SET @WYNIK=0.0
WHILE @PUNKT<@K_PRAWY
BEGIN
SET @WYNIK=@WYNIK+1/(SQRT(2*PI()))*(((@K_PRAWY-
@K_LEWY)*0.00005*(EXP(-POWER(@PUNKT,2)/2)
+4*EXP(-POWER(@PUNKT+0.00005*(@K_PRAWY-@K_LEWY),2)/2)+EXP(-
POWER(@PUNKT+0.0001*(@K_PRAWY-@K_LEWY),2)/2))/3))
SET @PUNKT=@PUNKT+0.0001*(@K_PRAWY-@K_LEWY)
END
RETURN @WYNIK
END
SELECT DBO.CALKA_N(0,0.1),DBO.CALKA_N(0,1),DBO.CALKA_N(0,10)
PROCEDURY WYZWALANE
Tworzenie funkcji
Przy tworzeniu funkcji, musisz określić typ wartości jaką funkcja zwróci.. Aby dostarczyć
tych informacji, po nazwie funkcji, typu RETURNS słowa kluczowego po definicji typu
danych. Oto prosty przykład:
Po określeniu typu wartość funkcji wróci, można utworzyć ciało funkcji. Ciało funkcji
zaczyna się początek i kończy się słowa kluczowe END. Oto przykład:
CREATE FUNCTION Dodatek ()
RETURNS Decimal(6,3)
BEGIN
END
Pomiędzy BEGIN i słowa kluczowe celowi, którym jest część, która stanowi zbiór funkcji,
można zdefiniować zadania funkcja które musi wykonać. Po wykonaniu tego zadania, tuż
przed kluczowym END, należy określić wartość zwraca. Odbywa się to poprzez wpisanie
słowa kluczowego return po wypowiedziWzór próbce wynosi:
Oto przykład
Wywoływanie Funkcji
Po funkcja została utworzona, można użyć wartości wraca. Korzystanie z funkcji jest także
dalej nazywając ją. Aby wywołać funkcję, należy zakwalifikować jego nazwę. Aby to zrobić,
wpisz nazwę bazy danych, w którym została utworzona, a następnie przez operatora okresie, a
następnie dbo, a następnie przez operatora okresie, a następnie nazwę funkcji, a jego
nawiasach. Wzór do wykorzystania jest:
Dominik Obarski
Rok V TRiL