Skrypty, procedury przechowywane i wyzwalane

Slides:



Advertisements
Podobne prezentacje
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Advertisements

Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Wykład 3 Prowadzący: dr Paweł Drozda
Prowadzący: mgr inż. Elżbieta Majka
SQL – Strukturalny język zapytań
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
Kurs Pascala – spis treści
Co to jest studium przypadku?
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
Procedury systemowe w systemie DOS
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
INFORMATYKA Wykładowca: mgr Tadeusz Ziębakowski p. 126 I piętro (naprzeciw dziekanatu)
PODSTAWY JĘZYKA PHP 1. czym jest 2. składnia 3. wersje 4. bazy danych
Wykład 2 Wojciech Pieprzyca
Wykład 8 Wojciech Pieprzyca
BD-LAB6 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Wykład 1 Wojciech Pieprzyca
Wykład 2 struktura programu elementy języka typy zmienne
Podprogramy.
Technologia.Net Bazy danych. Technologia ADO.Net Służy do dostarczania danych z rożnych źródeł (baz danych) do aplikacji Jest produktem Microsoft Umożliwia.
Język SQL (Structured Query Language) DDL (Data Definition Language)
Bezpieczeństwo baz danych
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Narzędzia do testowania
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Podstawy C# Grupa .NET PO.
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
MySQL – ODBC - ACCESS.
Programowanie strukturalne i obiektowe
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
System wspierający obsługę przedmiotów projektowych
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Andrzej Macioł Bazy danych – SQL – cz. 1. Andrzej Macioł Składowe SZBD Jądro SZBD realizuje podstawowe funkcje związane z przechowywaniem danych, kontrolą
SQL - Structured Query Language
Aplikacje bazodanowe ADO.NET PHP i MySQL
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie baz danych
Zajęcia I Organizacja zajęć Rejestracja i uruchamianie makr
PL/SQL – dalsza wędrówka
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Systemy Baz Danych Wykład III
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
Informatyka Stosowana – ROK II / III
Współpraca PHP i MySQL Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z danych zapisanych na serwerze jest współpraca z relacyjna.
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Projekt „NEW-TECH Program rozwoju praktycznych kompetencji nauczycieli zawodów branż nowych technologii” jest współfinansowany przez Unię Europejską Projekt.
Widoki (views) - Perspektywy:
Strukturalny język zapytań SQL - historia
Dane, zmienne, instrukcje
Zapis prezentacji:

Skrypty, procedury przechowywane i wyzwalane Wprowadzenie do systemów baz danych

Potrzeba dodatkowego zabezpieczenia danych Bezpośredni dostęp użytkownika do zapytań DLL (SELECT, DELETE, INSERT INTO i UPDATE) może powodować lukę w bezpieczeństwie. Zasady integralności i bezpieczeństwa danych powinny być kontrolowane przez serwer, a nie przez aplikację kliencką. Więzy integralności określone w instrukcji CREATE TABLE i transakcje są często niewystarczające i potrzebny jest dodatkowy mechanizm kontroli integralności. Język SQL jest językiem deklaratywnym i dla rozwiązania pewnych zagadnień istnieje potrzeba wprowadzenia elementów proceduralności – proceduralnego języka SQL.

Zagadnienia Przetwarzanie wsadowe, skrypty SQL Procedury przechowywane (składowane) Wyzwalacze Funkcje użytkownika Narzędzia Producenci stworzyli różne wersje proceduralnych języków SQL Microsoft – język T-SQL Oracle – język PL/SQL PostgreSQL – PL/pgSQL Prezentacja omawia przede wszystkim język T-SQL i PL/pgSQL

Skrypt – program wsadowy Sekwencja instrukcji SQL zapisana w osobnym pliku Program wsadowy to grupa instrukcji T-SQL zebrana w jedną logiczną całość Skrypt rozdziela się na programy wsadowe instrukcją GO – dotyczy tylko języka T-SQL Instrukcje w skryptach, innych systemów zarządzania bazami danych, niż MS SQL Server, rozdziela się średnikami

Deklarowanie zmiennych DECLERE @<nazwa_zmiennej> [AS] <typ_zmiennej>[, @<nazwa_zmiennej> [AS] <typ_zmiennej>,…] Przykłady: DECLERE @NR int, @Nazwiko AS varchar(15)

Przypisywanie wartości zmiennym (instrukcja SET) DECLARE @NR int, @tekst AS varchar(15) SET @NR = 10 SET @tekst = 'Numer = ' print @nr print @tekst + CAST(@NR AS varchar(15))

Przypisywanie wartości zmiennym (instrukcja SET) USE studenci GO DECLARE @średnia_ocen as NUMERIC(5,3) SET @średnia_ocen = (SELECT AVG(ocena) FROM oceny) PRINT @średnia_ocen PRINT 'średnia ocen studentów = ' + CAST(@średnia_ocen AS CHAR(5))

Przypisywanie wartości zmiennym (instrukcja SELECT) USE studenci GO DECLARE @średnia_ocen as NUMERIC(5,3) SELECT @średnia_ocen = AVG(ocena) FROM oceny PRINT @średnia_ocen PRINT 'średnia ocen studentów = ' + CAST(@średnia_ocen AS CHAR(5))

Ważne funkcje systemowe @@IDENTITY – zwraca ostatnią wartość identyfikatora ostatniej instrukcji INSERT lub SELECT INTO @@ROWCOUNT – zwraca liczbę wierszy, których dotyczyła ostatnia instrukcja @@VERSION – zwraca informację o serwerze @@ERROR – zwraca numer błędu ostatniej instrukcji T-SQL (0 oznacza brak błędu)

Przykład użycia @@IDENTITY USE studenci GO DECLARE @ID int INSERT INTO student(nazwisko, imie, data_urodzenia, nr_albumu, adres_miasto, adres_ulica) VALUES (N'Nowik', N'Jan', '1991-11-11', N'123', N'Gdynia', N'Polska 35') SET @ID = @@IDENTITY PRINT @ID

Przykład: @@ROWCOUNT, @@ERROR, @@VERSION USE studenci GO SET NOCOUNT ON; SELECT * from student; PRINT 'Liczba wierszy: ' + CAST(@@ROWCOUNT AS char(4)) PRINT 'Błąd: ' + CAST(@@ERROR AS char(4)) PRINT 'Wersja systemu: ' + @@VERSION

Instrukcja GO GO rozdziela skrypt na kilka programów wsadowych GO umieszcza się zawsze w nowej linii Pewne instrukcje wymagają osobnych programów wsadowych, co można uzyskać dzieląc skrypt instrukcjami GO

Dynamiczne tworzenie zapytań instrukcja EXEC Argumentem instrukcji EXEC jest zmienna łańcuchowa lub łańcuch tekstu zawierający instrukcję Wykonywana instrukcja może być tworzona dynamicznie w trakcie wykonywania skryptu EXEC({<zmienna łańcuchowa> | <łańcuch tekstu>} USE studenci GO DECLARE @tabela AS varchar(20) SET @tabela = 'student' EXEC('SELECT * from ' + @tabela)

Procedury przechowywane (składowane) Procedura przechowywana to rodzaj skryptu (programu wsadowego) przechowywanego w bazie danych, a nie w osobnym pliku Procedura w odróżnieniu od skryptu może posiadać parametry wejściowe, wyjściowe i wartości wynikowe

Tworzenie procedury przechowywanej CREATE PROCEDURE <nazwa_procedury> [@nazwa_parametru [AS] typ_danych [=wartość_domyślna | NULL] [OUTPUT|OUT], …] AS kod procedury

Przykład procedury dodającej studenta CREATE PROCEDURE dbo.InsertStudent ( @nazwisko varchar(20), @imie varchar(20), @nr_albumu char(11), @adres_miasto varchar(20), @adres_ulica varchar(50) ) AS SET NOCOUNT OFF; INSERT INTO [student] ([nazwisko], [imie], [nr_albumu], [adres_miasto], [adres_ulica]) VALUES (@nazwisko, @imie, @nr_albumu, @adres_miasto, @adres_ulica); SELECT id_studenta, nazwisko, imie, nr_albumu, adres_miasto, adres_ulica FROM student WHERE (id_studenta = SCOPE_IDENTITY())

Wywołanie procedury USE [studenci] GO EXEC InsertStudent 'Aabik', 'Jan', '1234567', 'Gdynia', '10 Lutego 11'

Uwagi Słowo kluczowe OUTPUT określa parametry wyjściowe procedury OUTPUT musi być użyte przy deklaracji procedury i przy jej wywołaniu Pominięcie OUTPUT przy wywołaniu spowoduje, że wartość parametru wyjściowego nie zostanie przypisana EXEC można pominąć , gdy wywołanie procedury jest pierwszą instrukcją w programie wsadowym, ale lepiej tego nie robić

Przykład zmiennego parametru CREATE PROCEDURE dbo.InsertStudent_NR ( @nazwisko varchar(20), @imie varchar(20), @nr_albumu char(11), @adres_miasto varchar(20), @adres_ulica varchar(50), @numer int OUTPUT ) AS SET NOCOUNT OFF; INSERT INTO [student] ([nazwisko], [imie], [nr_albumu], [adres_miasto], [adres_ulica]) VALUES (@nazwisko, @imie, @nr_albumu, @adres_miasto, @adres_ulica); SET @numer = @@IDENTITY

Wywołanie procedury zmieniającej parametr USE [studenci] GO DECLARE @numer int EXEC InsertStudent_NR 'Kitel', 'Jan', 'q234567', 'Gdynia', '10 Lutego 11',@numer OUTPUT PRINT @numer

Instrukcje sterujące przebiegiem programu IF … ELSE CASE GOTO WHILE RETURN BEGIN … END TRY/CATH WAITFOR – maksymalnie do 24h WAITFOR DELAY '01:00' - czekaj 1h WAITFOR TIME '01:00' - czekaj do godziny 1

Zastosowania Tworzenie procesów wymagających wywoływania akcji proceduralnych Poprawa bezpieczeństwa Poprawa wydajności

Wywoływanie funkcji SELECT 2*log(10) AS wynik 4,60517 SELECT moja_funkcja(argumenty) W bazie danych ORACLE w zapytaniu musi być klauzula FROM

Funkcje definiowane przez użytkownika CREATE FUNCTION <nazwa_funkcji> [@nazwa_parametru [AS] typ_danych [=wartość_domyślna], … RETURNS {typ_skalarny|TABLE [(def_tabeli)] AS BEGIN kod_funkcji {RETURN obliczony_wynik | RETURN (instrukcja SELECT)} END

Przykład funkcji skalarnej CREATE FUNCTION dbo.suma ( @param1 varchar(20) = 'Ala ma kota', @param2 varchar(20) = ' a kot ma Alę' ) RETURNS varchar(40) AS BEGIN DECLARE @suma varchar(40) SET @suma = @param1 + @param2 RETURN @suma END

Przykład funkcji zwracającej tabelę CREATE FUNCTION dbo.ponad_avg() RETURNS @table_variable TABLE (student varchar(40), [średnia] REAL) AS BEGIN DECLARE @Param1 real SELECT @Param1 = AVG(ocena) FROM oceny INSERT INTO @table_variable SELECT Student, AVG(ocena) AS Expr1 FROM lista_ocen GROUP BY Student HAVING (AVG(ocena) > @Param1) RETURN END

Przykłady wywołań funkcji Wywołanie funkcji zwracającej tabelę select * from ponad_avg() Wywołanie funkcji skalarnej select dbo.suma('tekst1', ' Text2') as wynik select dbo.suma('tekst1',default) as wynik

Tworzenie obiektów bazy danych w kodzie zarządzanym SQL Server 2005 umożliwia tworzenie obiektów bazy danych w preferowanym języku platformy .NET Najprościej jest tworzyć te obiekty przy pomocy Visual Studio otwierając w wybranym języku SQLServer Project Po skompilowaniu VS utworzy bibliotekę, która zostanie dołączona do bazy danych a stworzone w projekcie obiekty staną się obiektami bazy danych

Tworzenie funkcji - PostgreSQL CREATE FUNCTION nazwa([typ1[,...typN]]) RETURNS typ_zwracany AS {’nazwa_pliku’ | ’definicja’} LANGUAGE ’nazwa_języka’ Nazwa języka to jeden z dostępnych w PostgreSQL języków: C, sql, plpgsql, pltcl, plperl Przed pierwszym użyciem język proceduralny trzeba zainstalować poleceniem CREATE LANGUAGE

Przykład CREATE FUNCTION funkcja(text) RETURNS bool AS ’DECLARE tekst ALIAS FOR $1; BEGIN INSERT INTO tabela1 VALUES (tekst); RETURN ’yes’; END;’ LANGUAGE ’plpgsql’

Elementy języka PL/pgsql Komentarze Deklaracje zmiennych Instrukcje przypisania Instrukcje SQL Instrukcje warunkowe Pętle WHILE i FOR Wyjątki i komunikaty

Tworzenie wyzwalacza PostgreSQL CREATE TRIGGIER nazwa {AFTER | BEFORE} zdarzenie1 [OR zdarzenie2 ...] ON nazwa_tabeli FOR EACH {ROW | STATEMENT} EXECUTE PROCEDURE nazwa_funkcji(argumenty) Zdarzeniem może być INSERT, DELETE, UPDATE Instrukcja CREATE TRIGGIER występuje w SQL3, ale nie występuje w SQL2 i SQL1

Tworzenie wyzwalacza SQL Server CREATE TRIGGIER nazwa ON nazwa_tabeli lub widoku {{FOR | AFTER} <[DELETE][,][INSERT][,][UPDATE] | INSTED OF}} AS instrukcje SQL

Instrukcja CREATE RULE Instrukcja CREATE RULE jest rozszerzeniem języka SQL zastosowanym w PostgreSQL CREATE RULE nazwa AS ON {SELECT | UPDATE | DELETE | INSERT} TO nazwa_tabeli [WHERE warunek] DO [INSTED] {instrukcja sql | NOTHING}

Zastosowania Centralne sprawdzanie poprawności danych Śledzenie zmian np. zapisanie w osobnej tabeli kto i kiedy dokonywał zmian, a nawet zapisanie danych, które zmieniono Polepszenie bezpieczeństwa np. wysyłanie wiadomości pocztą elektroniczną o niektórych zmianach Komunikacja z innymi bazami danych (języki c, pgperl, pgtcl) Replikacja danych Przygotowanie danych dla aplikacji klienckich

Wady System oparty głównie na wyzwalaczach i procedurach wyzwalanych może być trudny do zarządzania Pogarsza się przejrzystość bazy danych Brak standardowej składni zapisu procedur przechowywanych i wyzwalaczy – zastosowanie ich praktycznie uniemożliwia zmianę SZBD W miarę wzrostu liczby wyzwalaczy rosną koszty przetwarzania