Struktura bazy danych

Podobne dokumenty
Struktura bazy danych

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

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

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

BAZY DANYCH Cz III. Transakcje, Triggery

ACESS- zadania z wykorzystaniem poleceń SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

BAZA DANYCH SIECI HOTELI

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

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

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

Aspekty aktywne baz danych

Hurtownia Świętego Mikołaja projekt bazy danych

Wykład 05 Bazy danych

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

Bazy danych. dr inż. Arkadiusz Mirakowski

Język SQL, zajęcia nr 1

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

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Bloki anonimowe w PL/SQL

Bazy Danych i Usługi Sieciowe

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

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

Wykład 5. SQL praca z tabelami 2

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

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Bazy danych i usługi sieciowe

Język SQL. Rozdział 8. Język manipulowania danymi DML zadania

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

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

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

15. Funkcje i procedury składowane PL/SQL

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

Zadanie 2 Korzystając z funkcji PMT oblicz miesięczną ratę i całkowity koszt pożyczki dla podanych niżej danych. Raty miesięczne/roczn e

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

Język SQL. Rozdział 8. Język manipulowania danymi DML

SQL 4 Structured Query Lenguage

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

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

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Obowiązuje od wersji

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

Składowane procedury i funkcje

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

PODSTAWY BAZ DANYCH 13. PL/SQL

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Procedury i funkcje składowane

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Systemowe aspekty baz

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

SQL :: Data Definition Language

1. Wyzwalacze BD (ang. triggers)

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Pakiety podprogramów Dynamiczny SQL

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

Cele. Definiowanie wyzwalaczy

SQL Server Łukasz Łysik 21 października 2008

Microsoft SQL Server. Tradycyjna architektura klientserwer. Przeniesienie części logiki na serwer. Programowanie Transact SQL

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

na MS SQLServer 2005 i 2008

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Relacyjne bazy danych. Podstawy SQL

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

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

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

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

Systemowe aspekty baz danych

Transakcje inf. podstawowe

Zaawansowane bazy danych i hurtownie danych semestr I

Ćwiczenia 2 IBM DB2 Data Studio

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

Relacyjne bazy danych. Podstawy SQL

Wykład 8. SQL praca z tabelami 5

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

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

Bazy danych i usługi sieciowe

Bartosz Jachnik - Kino

Wyzwalacze (triggery) Przykład

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

Administracja i programowanie pod Microsoft SQL Server 2000

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

P o d s t a w y j ę z y k a S Q L

PL/SQL co, gdzie i dlaczego?

Baza danych hotel Maciej Gerus

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Bazy danych 7. SQL podstawy

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

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

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

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

Nowe technologie baz danych

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Transkrypt:

Procedury składowane, funkcje i wyzwalacze Struktura bazy danych Tabela Oddziały ID Nazwa Adres 10 POZNAN Kwiatowa 3 20 WARSZAWA al. Jerozolimskie 22 30 KRAKOW Planty 14 40 WROCLAW Nad Odra 16 50 GDANSK Portowa 30 Tabela Stanowiska Stanowisko Placa_min Placa_max BRYGADZISTA 2510,00 3750,00 DYREKTOR 8100,00 9200,00 KIEROWNIK 3800,00 5500,00 MONTER 1300,00 2500,00 PRAKTYKANT 1150,00 1250,00 SEKRETARKA 1270,00 2050,00 Tabela Pracownicy (=Zatrudnieni ID Nazwisko Stanowisko Szef Zatrudniony Placa_pod Placa_dod ID_Oddz 100 SUMINSKI DYREKTOR NULL 1968-01-01 8130,00 420,50 10 110 BARTCZAK KIEROWNIK 100 1973-05-01 4350,00 210,00 40 120 MALINOWSKI KIEROWNIK 100 1977-09-01 4070,00 NULL 30 130 BRZEZINSKI KIEROWNIK 100 1968-07-01 4960,00 NULL 20 140 ZABLOCKI BRYGADZISTA 130 1975-09-15 4830,00 105,00 20 150 LEWANDOWSKI BRYGADZISTA 130 1977-09-01 2645,50 NULL 20 160 KOPROWSKI BRYGADZISTA 130 1985-03-01 2590,00 NULL 20 170 JEZIERSKI MONTER 130 1992-10-01 1439,70 80,50 20 180 BOGULA SEKRETARKA 100 1985-02-20 1410,20 NULL 10 190 MALINIAK MONTER 140 1993-09-01 1371,00 NULL 20 200 URBANIAK PRAKTYKANT 140 1994-07-15 908,00 NULL 30 210 CELINSKI PRAKTYKANT 130 1993-10-15 950,00 170,60 30 220 KOWAL MONTER 110 1993-01-10 1480,00 NULL 20 230 HANTCZAK MONTER 120 1992-09-01 1480,00 90,00 30 IF OBJECT_ID('Nazwa-procedury','P' IS NOT NULL DROP PROCEDURE Nazwa-procedury CREATE PROCEDURE Nazwa-procedury ( @Parametr-1 typ-parametru [= wartość-domyślna] [OUTPUT] {@Parametr-2 typ-parametru [= wartość-domyślna] [OUTPUT] } {Komendy SQL} BAD210 Strona 1

IF OBJECT_ID('Nazwa-funkcji','FN' IS NOT NULL DROP FUNCTION Nazwa-funkcji CREATE FUNCTION Nazwa-funkcji ( @Parametr-1 typ-parametru [= wartość-domyślna] [OUTPUT] {@Parametr-2 typ-parametru [= wartość-domyślna] [OUTPUT] } RETURNS Typ-funkcji DECLARE @Wynik-funkcji Typ-funkcji {Komendy SQL ustalające wynik funkcji} RETURN(@Wynik-funkcji Zadania - Procedury Zad 1. Napisz procedurę PODWYZKA, która wszystkim pracownikom oddziału (parametr podniesie płacę podstawową o podany procent (parametr. Domyślnie podwyżka powinna wynosić 15%. IF OBJECT_ID('Podwyzka','P' IS NOT NULL DROP PROCEDURE Podwyzka CREATE PROCEDURE Podwyzka ( @Oddzial @Procent Skrypt testujący: TRAN -- Rozpoczęcie transakcji SELECT TOP 5 Placa_pod, * FROM Zatrudnieni EXEC Podwyzka 10, 50 SELECT TOP 5 Placa_pod, * FROM Zatrudnieni -- Wycofanie zmian 2. Dodaj do powyższej procedury obsługę błędu jeśli podano identyfikator nieistniejącego zespołu to procedura powinna zasygnalizować odpowiedni błąd. Wskazówka 1: Skorzystać z funkcji RAISERROR. Wskazówka 2: W skrypcie testującym skorzystać z bloków TRY i CATCH. RAISERROR (N'Błędny numer oddziału: %d ', -- Message text. 16, -- Severity, severity 11-19 will cause execution to jump to CATCH block 1, -- State @Oddzial -- Parameter Skrypt testujący: TRAN -- Rozpoczęcie transakcji SELECT TOP 5 Placa_pod, * FROM Zatrudnieni BAD210 Strona 2

TRY EXEC Podwyzka 97,50 SELECT TOP 5 Placa_pod, * FROM Zatrudnieni TRY CATCH SELECT ERROR_NUMBER( ErrorNumber,ERROR_MESSAGE( ErrorMessage; CATCH -- Wycofanie zmian 3. Napisz procedurę LICZBA_PRACOWNIKOW, która dla podanego kodu oddziału (parametr zwróci liczbę pracowników zatrudnionych w tym oddziale. Liczba pracowników powinna być zwrócona przez argument wyjściowy. Procedura powinna obsługiwać podanie nieprawidłowej nazwy oddziału. Skrypt testujący: DECLARE @Oddzial INT DECLARE @Ilosc INT SET @Oddzial=10 TRY EXEC Ilosc_pracownikow @Oddzial, @Ilosc OUTPUT PRINT 'Ilość pracowników w oddziale: ' + CT(@oddzial as VARCHAR(2 + ' wynosi: ' + CT(@Ilosc VARCHAR(10 TRY CATCH SELECT ERROR_NUMBER( ErrorNumber,ERROR_MESSAGE( ErrorMessage; CATCH 4. Napisz procedurę NOWY_PRACOWNIK, która będzie służyła do wstawiania nowych pracowników do tabeli Zatrudnieni. Parametrami procedury mają być nazwisko nowego pracownika, kod oddziału, nazwisko jego szefa i wartość płacy podstawowej. Domyślną datą zatrudnienia jest bieżąca data, domyślnym etatem MONTER. Procedura ma obsługiwać błędy podania istniejącego nazwiska, błędnego zespołu i błędnego nazwiska szefa. W tym celu uzupełnij poniższy wzór. IF OBJECT_ID('','' IS NOT NULL DROP PROCEDURE Nowy_pracownik CREATE PROCEDURE Nowy_pracownik ( @Nazwisko, @Oddzial, @NazwiskoSzefa, @Placa_pod, @Stanowisko = '', @Zatrudniony DATETIME = NULL BAD210 Strona 3

--1. Zadeklaruj nowe zmienne @Szef i @ID typu INT DECLARE DECLARE --2. Ustal ID szefa na podstawie nazwiska SET @Szef = (SELECT WHERE Nazwisko = --3. Ustal nowe ID pracownika. Nowe ID jest równe MAX istniejących ID + 10 SET @ID = ( ISNULL(MAX(ID,0+10 FROM --4. Jeśli data zatrudnienia nie została podana (jest NULL, pobierz datę dzisiejszą IF @Zatrudniony SET @Zatrudniony = -- 5. Jeśli Nazwisko już istnieje wywołaj bląd i zakończ procedurę IF EXISTS (SELECT ID FROM Zatrudnieni WHERE RAISERROR (N'Nazwisko %s ju istnieje', -- Message text. 16, -- Severity, severity 11-19 will cause execution to jump to CATCH block 1, -- State TO ProcEnd -- 6. Jeśli ID szefa nie jest prawidłowe wywołaj bląd i zakończ procedurę IF RAISERROR (N'B³êdne nazwisko szefa: %s', -- Message text. 16, -- Severity, severity 11-19 will cause execution to jump to CATCH block 1, -- State TO ProcEnd -- 7. Jeżeli kod oddziału nie jest prawidłowy wywołaj bląd i zakończ procedurę IF NOT EXISTS ( RAISERROR (N'Błędny numer oddziału: %d', -- Message text. 16, -- Severity, severity 11-19 will cause execution to jump to CATCH block 1, -- State TO ProcEnd --8. Wstaw nowe dane INSERT INTO Zatrudnieni (ID,Nazwisko,ID_Oddz,Stanowisko,Szef,Zatrudniony,Placa_pod VALUES ( ProcEnd: BAD210 Strona 4

-- Skryp testujący procedurę TRAN -- Rozpoczęcie transakcji SELECT TOP 5 * FROM Zatrudnieni WHERE Nazwisko LIKE 'B%' TRY --EXEC Nowy_pracownik 'BARTCZAK',99,'NOWAK',1200 --1. Błąd nazwiska --EXEC Nowy_pracownik 'BAN',99,'NOWAK',1200 --2. Błąd szefa --EXEC Nowy_pracownik 'BAN',99,'BRZEZINSKI',1200 --3. Błąd oddziału --EXEC Nowy_pracownik 'BAN',10,'BRZEZINSKI',1200 --4. Paremetry prawidłowe SELECT TOP 5 * FROM Zatrudnieni WHERE Nazwisko LIKE 'B%' TRY CATCH SELECT ERROR_NUMBER( ErrorNumber,ERROR_MESSAGE( ErrorMessage; CATCH -- Wycofanie Zadania - funkcje 5. Napisz funkcję PLACA_NETTO, która dla podanej płacy brutto (parametr i podanej stawki podatku wyliczy płacę netto. IF OBJECT_ID('Placa_netto','FN' IS NOT NULL DROP FUNCTION CREATE FUNCTION Placa_netto ( @Placa_Brutto FLOAT, @ProcentPodatku FLOAT RETURNS -- Test funkcji w miejsce wpisz numer indeksu SELECT [Labs\].Placa_netto (120,30 6. Napisz funkcję SILNIA, która dla danego n obliczy n! = 1 * 2 * * n. IF OBJECT_ID('Silnia','FN' IS NOT NULL DROP FUNCTION CREATE FUNCTION Silnia (@n INT RETURNS INT DECLARE @Wynik INT DECLARE @k INT SET @k=1 WHILE @k BAD210 Strona 5

IF @k=1 SET @Wynik ELSE SET @Wynik = SET @k = @k + RETURN(@Wynik -- Test funkcji w miejsce wpisz numer indeksu SELECT [Labs\].Silnia (1, [Labs\].Silnia (2, [Labs\].Silnia (3, [Labs\].Silnia (4, [Labs\].Silnia (5, [Labs\].Silnia (6 7. Napisz funkcję, która dla daty zatrudnienia pracownika wylicza staż pracy w latach. IF OBJECT_ID('Staz','FN' IS NOT NULL DROP FUNCTION CREATE FUNCTION Staz (@Data DATETIME RETURNS INT -- Test funkcji w miejsce wpisz numer indeksu SELECT Nazwisko, Zatrudniony, Staż=[Labs\].Staz(Zatrudniony FROM Zatrudnieni Zadania - Wyzwalacze 8. Utwórz wyzwalacz Szef na tabeli Zatrudnieni zamieniający wartość kodu szefa (kolumna Szef na NULL w przypadku usunięcia pracownika z tabeli Zatrudnieni, który jest szefem dla innych pracowników. -- Tworzenie wyzwalacza IF OBJECT_ID('dbo.Szef','TR' IS NOT NULL DROP TRIGGER dbo.szef CREATE TRIGGER dbo.szef ON FOR UPDATE SET Szef = NULL WHERE Szef IN (SELECT ID FROM -- Skrypt testujący TRAN SELECT * FROM Zatrudnieni WHERE Szef IS NULL OR Szef IN ('110', '120' DELETE FROM Zatrudnieni WHERE ID='120'; BAD210 Strona 6

SELECT * FROM Zatrudnieni WHERE Szef IS NULL OR Szef IN ('110', '120' 9. Utwórz tabelę Historia o kolumnach ID, ID_Prac, Placa_pod, Stanowisko, Oddzial, Sysdate. Napisz wyzwalacz Trace na tabeli Zatrudnieni, który po każdej modyfikacji (wstawiania, zmiany, usuwania płacy podstawowej, stanowiska lub oddziału będzie wpisywał wartości historyczne do tabeli Historia. -- Zakładanie tabeli Historia IF OBJECT_ID('dbo.Historia','U' IS NOT NULL DROP TABLE dbo.historia CREATE TABLE dbo.historia ( ID INT IDENTITY(1,1, Typ VARCHAR(1, ID_Prac INT, Placa_pod FLOAT, Stanowisko VARCHAR(20, ID_Oddz VARCHAR(20, Sysdate DATETIME DEFAULT GETDATE( ; -- Tworzenie wyzwalacza IF OBJECT_ID('dbo.Trace','TR' IS NOT NULL DROP dbo.trace CREATE TRIGGER dbo.trace ON FOR INSERT, UPDATE, DELETE IF EXISTS (SELECT ID FROM inserted -- Stare wartości IF EXISTS (SELECT ID FROM deleted INSERT INTO Historia (ID_Prac,Typ,Placa_pod,Stanowisko,ID_Oddz SELECT ID,'S', Placa_pod, Stanowisko, ID_Oddz FROM -- Nowe wartości INSERT INTO (ID_Prac,Typ,Placa_pod,Stanowisko,ID_Oddz SELECT ID, 'N', Placa_pod, Stanowisko, ID_Oddz FROM ELSE -- Usuwane wartości IF EXISTS (SELECT ID FROM deleted INSERT INTO (ID_Prac,Typ,Placa_pod,Stanowisko,ID_Oddz SELECT ID,'U', Placa_pod, Stanowisko, ID_Oddz FROM BAD210 Strona 7

-- Skrypt testujący TRAN SELECT * FROM Historia; UPDATE Zatrudnieni SET Placa_pod = 3800 WHERE Nazwisko = 'KOWAL'; DELETE FROM Zatrudnieni WHERE Nazwisko = 'BOGULA'; SELECT * FROM Historia; BAD210 Strona 8