W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).



Podobne dokumenty
Paweł Rajba

Administracja i programowanie pod Microsoft SQL Server 2000

Kursory. A. Pankowska 1

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Elementy. języka SQL

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

SQL 4 Structured Query Lenguage

Administracja i programowanie pod Microsoft SQL Server 2000

Systemowe aspekty baz

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Transakcje inf. podstawowe

Systemowe aspekty baz danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

na MS SQLServer 2005 i 2008

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

Struktura bazy danych

Ćwiczenia 2 IBM DB2 Data Studio

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Oracle PL/SQL. Paweł Rajba.

Bazy danych i usługi sieciowe

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Bazy danych. dr inż. Arkadiusz Mirakowski

Bazy danych Ćwiczenia projektowe

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Język PL/SQL Procedury i funkcje składowane

Microsoft SQL Server Podstawy T-SQL

Bazy Danych i Usługi Sieciowe

Lab.8: Podstawy języka SQL.

Aspekty aktywne baz danych

Bazy danych Ćwiczenia projektowe

Wykład 8. SQL praca z tabelami 5

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

PODSTAWY BAZ DANYCH 13. PL/SQL

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Programowanie obiektów

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

PL/SQL. Zaawansowane tematy PL/SQL

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Internetowe bazy danych

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

SQL Server. Odtwarzanie baz danych.

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Oracle PL/SQL. Paweł Rajba.

Bazy danych 6. Klucze obce. P. F. Góra

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Oracle PL/SQL. Paweł Rajba.

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

BAZY DANYCH Cz III. Transakcje, Triggery

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Składowane procedury i funkcje

ACESS- zadania z wykorzystaniem poleceń SQL

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Hurtownia Świętego Mikołaja projekt bazy danych

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Autor: Joanna Karwowska

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Programowanie zaawansowane w T-SQL

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

124 Bazy danych. Zaawansowane programowanie w T- SQL

Zbiór zadań z SQLa z elementami T-SQLa. (Wersja robocza z dnia r.) (Zgłaszanie usterek Robert.Fidytek@inf.ug.edu.pl)

Modelowanie wymiarów

BAZA DANYCH SIECI HOTELI

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Bazy danych 8. Procedury składowane i kursory. P. F. Góra

Język SQL, zajęcia nr 1

Bazy danych 10. SQL Widoki

Bazy danych - Materiały do laboratoriów VIII

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Nowe technologie baz danych

Wykład 05 Bazy danych

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

LAB 3 (część 1 Projektu)

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Instrukcja instalacji aplikacji PlanSoft.org

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Wykład 5. SQL praca z tabelami 2

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Tuning SQL Server dla serwerów WWW

Język PL/SQL. Rozdział 2. Kursory

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Wyzwalacze (triggery) Przykład

Transkrypt:

Procedury składowane c.d. Parametry tablicowe w Transact-SQL. W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP). Zadanie 1. Proszę napisad procedurę składowaną, która wpisze do tabeli Customers dane z parametru tablicowego. CREATE TYPE CustomerTableType AS TABLE ( CustomerID NCHAR(5) PRIMARY KEY, CompanyName NVARCHAR(40) NOT NULL, ContactName NVARCHAR(30), Address NVARCHAR(60), City NVARCHAR(15), Region NVARCHAR(15), PostalCode NVARCHAR(10), Country NVARCHAR(15), Phone NVARCHAR(24), Fax NVARCHAR(24) ); CREATE PROC Zad1 @TVP CustomerTableType READONLY AS INSERT INTO dbo.customers( CustomerID, CompanyName, ContactName, Address, City, Region, PostalCode, Country, Phone, Fax) SELECT * FROM @TVP END Proszę przy użyciu powyższej procedury wpisad do tabeli Customers dane wszystkich dostawców z tabeli Suppliers. DECLARE @Tabela CustomerTableType INSERT INTO @Tabela SELECT SupplierID, CompanyName, ContactName, Address, City, Region, PostalCode, Country, Phone, Fax FROM Suppliers 1

SELECT * FROM @Tabela EXECUTE Zad1 @Tabela Kursory jako parametry w Transact-SQL. Kursory Transact-SQL (implementowane po stronie serwera - serwerowe). ISO Syntax DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY UPDATE [ OF column_name [,...n ] ] } ] [;] Transact-SQL Extended Syntax DECLARE cursor_name CURSOR [ LOCAL GLOBAL ] [ FORWARD_ONLY SCROLL ] [ STATIC KEYSET DYNAMIC FAST_FORWARD ] [ READ_ONLY SCROLL_LOCKS OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement [ FOR UPDATE [ OF column_name [,...n ] ] ] [;] Pobieranie wierszy: FETCH [ [ NEXT PRIOR FIRST LAST ABSOLUTE { n @nvar } RELATIVE { n @nvar } ] FROM ] { { [ GLOBAL ] cursor_name } @cursor_variable_name } [ INTO @variable_name [,...n ] ] ISO: INSENSITIVE tworzona jest kopia statyczna danych w bazie tempdb. Nie można aktualizowad (domyślnie można). SCROLL można wykorzystywad wszystkie opcje FETCH: FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE (domyślnie można używad tylko NEXT). READ ONLY nie można wykonywad pozycjonowanych zmian danych (domyślnie można, np. UPDATE WHERE CURRENT OF nazwakursora). UPDATE OF można aktualizowad tylko wymienione kolumny (samo UPDATE oznacza zgodę na aktualizacje wszystkich kolumn). T-SQL: LOCAL zakres (scope) kursora jest lokalny do wsadu (batch), procedury składowanej, wyzwalacza, gdzie kursor został zadeklarowany. Do kursora można się odwoływad przez lokalne zmienne lub parametr OUTPUT. Dealokacja następuje przy zakooczeniu wykonywania wsadu, procedury, wyzwalacza lub (w przypadku parametru OUTPUT) gdy ostatnia zmienna odwołująca się do kursora wyjdzie z zakresu lub zostanie zdealokowana. GLOBAL kursor będzie globalny dla połączenia. Zwolnienie pamięci będzie zrealizowane przy zamknięciu połączenia lub wskutek jawnie wykonanej operacji deallocate. 2

FORWARD_ONLY określa, że kursor może byd skrolowany tylko od pierwszego do ostatniego wiersza (można używad tylko FETCH NEXT). Jeśli wyspecyfikowano FORWARD_ONLY bez słowa STATIC, KEYSET lub DYNAMIC, kursor będzie dynamiczny (DYNAMIC). Jeśli nie wyspecyfikowano ani FORWARD_ONLY ani SCROLL, FORWARD_ONLY jest przyjmowany domyślnie, chyba, że jedno ze słów STATIC, KEYSET lub DYNAMIC zostało wyspecyfikowane. Dla kursorów STATIC, KEYSET i DYNAMIC domyślną opcją jest SCROLL. STATIC odpowiednik INSENSITIVE. KEYSET w bazie temdb tworzona jest tabela z wartościami klucza (kluczy) określającymi zestaw wierszy. Jeśli w chociaż jednej tabeli, do której odwołuje się kursor, nie ma indeksu unikalnego, to typ kursora zmieniany jest na STATIC. Zmiany na danych są widoczne poprzez kursor (w kolejnych operacjach FETCH), z wyjątkiem dodania nowego wiersza, skasowania wiersza lub aktualizacji klucza. Przy próbie pobrania nieistniejącego wiersza funkcja @@FETCH_STATUS zwraca wartośd -2. READ_ONLY zmiany pozycjonowane nie są możliwe (domyślnie są). OPTIMISTIC zmiany pozycjonowane są możliwe, jest realizowane optymistyczne sterowanie współbieżnością. SCROLL LOCK zmiany pozycjonowane są możliwe, jest realizowane pesymistyczne sterowanie współbieżnością z blokadami. Jeśli nie wyspecyfikowano ani READ_ONLY, ani OPTIMISTIC ani SCROLL LOCK, to będzie przyjęte ustawienie według poniższych reguł: Jeśli zdanie SELECT nie wspiera aktualizacji (np. niewystarczające uprawnienia), kursor będzie READ_ONLY. Standardowo kursory STATIC i FAST_FORWARD są READ_ONLY. Standardem dla kursorów DYNAMIC i KEYSET jest OPTIMISTIC. Przykład wykorzystania kursora jako parametru procedury składowanej (przykład z Books Online). USE AdventureWorks; /* Create a procedure with a cursor output parameter. */ CREATE PROCEDURE OpenCrsr @OutCrsr CURSOR VARYING OUTPUT AS SET @OutCrsr = CURSOR FOR SELECT TOP (20) LastName FROM Person.Contact WHERE LastName LIKE 'S%'; OPEN @OutCrsr; /* Allocate a cursor variable. */ DECLARE @CrsrVar CURSOR; /* Execute the procedure created earlier to fill the variable. */ EXEC OpenCrsr @OutCrsr = @CrsrVar OUTPUT; /* Use the variable to fetch the rows from the cursor. */ FETCH NEXT FROM @CrsrVar WHILE (@@FETCH_STATUS <> -1) 3

FETCH NEXT FROM @CrsrVar END; CLOSE @CrsrVar; DEALLOCATE @CrsrVar; Kursor w procedurze może byd oparty o zmienną tabelową, ale wówczas musi to byd kursor statyczny: SET @OutCrsr = CURSOR STATIC FOR W ten sposób można na zewnątrz procedury przekazad zestaw wierszy. Inna metoda: Można utworzyd tabelę trwałą lub tabelę tymczasową (pierwszym znakiem w nazwie jest #). Jeszcze inna metoda: jeśli procedura zawiera zdanie select, to można skorzystad ze schematu: CREATE PROC PR1 AS SELECT PRODUCTID FROM PRODUCTS DECLARE @TAB TABLE (P1 INT) INSERT INTO @TAB EXEC PR1 SELECT * FROM @TAB Zadanie 2. Proszę napisad procedurę, która poprzez parametr wyjściowy typu kursor przekaże dla każdej kategorii (ma byd podana nazwa kategorii) średnią cenę produktu w tej kategorii. Zadanie 3. Proszę napisad procedurę, która wypisze dla każdej tabeli w bazie danych Northwind ile jest w tabeli wierszy. CREATE PROC Z2 AS DECLARE @TableName NVARCHAR(40) DECLARE @Tab TABLE(Nazwa NVARCHAR(40), Ile BIGINT) DECLARE ctablenames CURSOR FORWARD_ONLY -- KURSOR DYNAMICZNY FOR SELECT Name FROM Northwind.sys.tables ORDER BY Name OPEN ctablenames FETCH FROM ctablenames INTO @TableName WHILE @@FETCH_STATUS<>-1 IF @@FETCH_STATUS<>-2 SET @TableName=RTRIM(@TableName)--usunięcie spacji z pr. strony INSERT INTO @Tab -- INSERT z EXECUTE EXECUTE('SELECT '''+@TableName+''', COUNT(*) FROM ['+ @TableName+']') FETCH FROM ctablenames INTO @TableName END --IF oraz WHILE SELECT * FROM @Tab CLOSE ctablenames DEALLOCATE ctablenames EXEC Z2 4

Zadanie 3. Proszę napisad procedurę, usunie wszystkie klucze obce z bazy danych Test (jeśli takiej bazy danych nie ma, należy ją utworzyd, ponadto należy w niej utworzyd przykładowe co najmniej trzy tabele i powiązad je więzami kluczy obcych). Wskazówka: Proszę przeglądnąd widok sys.objects (SELECT * FROM SYS.OBJECTS) w bazie danych Test. Usuwanie kluczy obcych będzie realizowane poleceniem ALTER TABLE DROP CONSTRAINT. Nazwę tabeli można wyświetlid funkcją ObjectName(object_id), gdzie object_id będzie pobrany z widoku sys.objects z kolumny Parent_object_id. 5