ibm db2 –cechy warte odnotowania · ibm db2, l.banachowski ibm db2 ... „db@ udb v8.2 sql...

125
1/125 IBM DB2, L.Banachowski IBM DB2 – cechy warte odnotowania v Różne typy tabel w tym MDC - wielowymiarowe v Podział jednej bazy danych na niezależne partycje nie tylko pojedynczej tabeli v Łączenie pokrewnych instrukcji w jedną w celu zwiększenia wydajności v Nadtabela i jej podtabele - oprócz typów i podtypów v Możliwość przekazywania z procedury zbiorów wynikowych wierszy – poprzez otwarte kursory również do aplikacji v Autoryzacja przyznanym poziomem dostępu do tabel, kolumn i wierszy – Label Based Access Control (LBAC)

Upload: truongtu

Post on 28-Jul-2018

282 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

1/125IBM DB2, L.Banachowski

IBM DB2 – cechy warte odnotowaniav Różne typy tabel w tym MDC - wielowymiarowev Podział jednej bazy danych na niezależne partycje

– nie tylko pojedynczej tabeliv Łączenie pokrewnych instrukcji w jedną

– w celu zwiększenia wydajnościv Nadtabela i jej podtabele - oprócz typów i podtypówv Możliwość przekazywania z procedury zbiorów

wynikowych wierszy – poprzez otwarte kursory– również do aplikacji

v Autoryzacja przyznanym poziomem dostępu do tabel, kolumn i wierszy – Label Based Access Control (LBAC)

Page 2: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

2/125IBM DB2, L.Banachowski

Bibliografia

Przygotowane w oparciu o:• materiały szkoleniowe używane przez Artura Wrońskiego (IBM) i E. Mrówkę-Matejewską;• Graeme Birchall, „DB@ UDB V8.2 SQL Cookbook” - dostępna w Internecie i w katalogu z prezentacją;• materiały edukacyjne firmy IBM: DB2 v9 Fundamentals, DB2 SQL Workshop, DB2 SQLWorkshop for Experienced Users, DB2 v9 Admin Workshop for Windows, DB2 v8 Stored ProceduresProgramming Workshop – dostępne w katalogu z prezentacją• Dokumentacja: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp• Raul F.Chong,.. „Zrozumieć DB2”, IBM Press, Mikom, PWN 2006.

Page 3: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

3/125IBM DB2, L.Banachowski

DB2 Editions

Enterprise Server Edition w ith Data Partition ing Feature

M assive ly P ara llel P rocessor (M PP )

Enterprise Server E dition

W orkgroup S erver Edition

C lusterDB2

Express Edition

Express: wersja darmowa – wsparcie techniczne na Forum internetowym.

Page 4: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

4/125IBM DB2, L.Banachowski

Instancja (database manager) - niezależne środowisko do pracy z bazami danych - dwie instancje na tym samym komputerze nie współużytkują żadnych zasobów (parametrów, plików). Serwer administracyjny udostępnia usługi zdalnej administracji i harmonogramowania zleceń (np. wykonanie skryptu SQL o określonej godzinie). Serwer administracyjny ma własną konfigurację i własną narzędziową bazę danych (tools database).

Page 5: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

5/125IBM DB2, L.Banachowski

Control Center

ObjectTreePane

ContentsPane

ObjectDetailPane

Page 6: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

6/125IBM DB2, L.Banachowski

Hierarchia obiektów DB2

Database 1

Instance 1

Log

DB configuration file

Index1

Index2BLOBs

Table1

Index1

Catalog

View1

View2

Table2 Table3

TSDMSREG2

SYSCATSPACE

TSDMSLRG3

dbm configuration file

Database 2Log

DB configuration file

Catalog

View1

Table1

SYSCATSPACE

USERSPACE1TSSMS1 TSDMSLRG1

Przy tworzeniu bazy danych domyślnie są tworzone trzy przestrzenie tabel: SYSCATSPACE, TEMPSPACE1, USERSPACE1

Instance=Database Manager

Page 7: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

7/125IBM DB2, L.Banachowski

Struktura przestrzeni tabel

Kontener – miejsce, gdzie przechowywane są dane np. katalog, plik, dysk (raw device).

Page 8: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

8/125IBM DB2, L.Banachowski

Przestrzeń tabel zarządzana przez system operacyjny (SMS)

CREATE TABLESPACE nazwaMANAGED BY SYSTEM USING ('path')

• Dodatkowe miejsce na dysku jest alokowane w miarę potrzeb –dane mogą być rozrzucone po całym dysku (większa fragmentacja).• Wymagają mniejszego zaangażowania DBA w zarządzanie.

Page 9: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

9/125IBM DB2, L.Banachowski

Przestrzeń tabel zarządzana przez DBA (DMS)

CREATE TABLESPACE nazwa MANAGED BY DATABASE USING (FILE 'path' size) • Składa się z kontenerów, które mogą być:

• plikami o z góry ustalonym rozmiarze, założonych przez DBA w momencie tworzenia przestrzeni tabel,

• jest dla nich od razu alokowana przestrzeń na dysku, co oznacza, że zwykle znajdują się w spójnym obszarze na dysku. Oznacza to mniej operacji R/W.

• dyskami (RAW devices) - system ma do dyspozycji spójny obszar całego dysku.

• Aby powiększyć rozmiar przestrzeni tabel, administrator musi dołożyć kolejny kontener albo rozszerzyć istniejący.• Dane LOB mogą być składowane w osobnej przestrzeni tabel.

Page 10: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

10/125IBM DB2, L.Banachowski

Typy przestrzeni tabel

v Regular - do przechowywania tabel, indeksów i tabel katalogu systemowego.

v Temporary - używane przez operacje, które wymagają dodatkowego miejsca na dysku: sortowanie, złączenia tabel, reorganizacja tabel.

v Long - do przechowywania danych typu LOB.

Page 11: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

11/125IBM DB2, L.Banachowski

Strony danych i ekstenty

• Domyślnie strona danych w bazie DB2 ma wielkość 4 KB (można ustawić też wielkość 8, 16 i 32 KB podczas tworzenia bazydanych). • Każda strona (niezależnie od wielkości) zawiera nagłówek o stałej wielkości 76 bajtów. • Wiersz danych nie może być dzielony między różne strony danych. • Rozmiar ekstentu może mieć różną wielkość (ustawioną przez DBA podczas tworzenia przestrzeni tabel) - równy wielokrotności rozmiaru strony danych.• Dane typu Long Field (long varchar i long vargraphic) przechowywane są w segmentach po 32 KB a dane LOB w segmentach po 64 MB.

Page 12: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

12/125IBM DB2, L.Banachowski

Wstawianie danych

• Miejsce na nowe dane jest alokowane we wszystkich kontenerach przestrzeni tabel wg algorytmu round-robin - dane w każdej przestrzeni tabel są równo rozłożone między kontenery. • W momencie dołożenia kontenera do przestrzeni tabel jest wykonywana reorganizacja danych tak, aby uzyskać równomiernie rozłożenie danych w kontenerach. • Kontenery powinny mieć jednakowy rozmiar,

• aby były równomiernie zapełniane i żeby miejsce w jednym z nich nie skończyło się szybciej niż w innych.

Page 13: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

13/125IBM DB2, L.Banachowski

Przypisanie puli buforów danych do przestrzeni tabel

Domyślna pula buforów: ibmdefaultbp

ALTER BUFFERPOOL ibmdefaultbp IMMEDIATE SIZE 1000;CREATE BUFFERPOOL databp IMMEDIATE SIZE 10000 PAGESIZE 8K;ALTER TABLESPACE userspace1 BUFFERPOOL databp;

Page 14: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

14/125IBM DB2, L.Banachowski

Struktura bazy danych

Page 15: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

15/125IBM DB2, L.Banachowski

Partycja bazy danych

Partycja bazy danych (węzeł bazodanowy, database partition) - część bazy danych składającą się z własnych danych, indeksów, plików konfiguracyjnych i dzienników transakcji.

• Oprócz tego są partycje tabeli jak w Oracle i MS SQL Server.

Page 16: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

16/125IBM DB2, L.Banachowski

Tabela – na poziomie fizycznym

Obiekt tabeli składa się z osobnych podobiektów: – Obiekt danych - zawierający zwykłe dane tabeli.– Obiekt indeksów – zawierający wszystkie indeksy założone na tabeli. – Obiekt dla pól typu LONG – zawierający zawartość wszystkich pól typu LONG.- Pierwszy obiekt dla pól typu LOB – zawierający wszystkie dane LOB.- Drugi obiekt dla pól typu LOB – zawierający metadane dla wszystkich danych LOB.

Page 17: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

17/125IBM DB2, L.Banachowski

Bitmapy ekstentów

Bitmapy:1. alokowanych/wolnych ekstentów w pliku,2. opisujące ekstenty używane przez daną tabelę.

Page 18: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

18/125IBM DB2, L.Banachowski

Typy tabel1. Regular – implementowane jako sterta (heap).

2. Append – typ regular zoptymalizowany dla operacji INSERT i wyszukiwania (z typu regular zmiana przez ALTER TABLE).

3. Multidimensional clustering (MDC) – grupowane według kilku kluczy (nazywanych wymiarami) – dla zastosowań OLAP.

4. Range-clustered (RCT) – grupowane liniowo względem wartości jednoznacznego klucza (wartość klucza określa adres) z określonego przedziału wartości, z góry alokowany obszar dla rekordów.• Możliwy obszar nadmiarowy dla kluczy spoza określonego przedziału.• Oprócz tego niezależnie są indeksy pogrupowane.

5. Partycjonowane

Page 19: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

19/125IBM DB2, L.Banachowski

Składowanie tabeli MDC jako zbioru komórek z dostępem przez indeksy blokowe

Komórka (pojęcie logiczne) – zbiór rekordów z tym samym układem wartości wymiarów.

Indeks blokowy – osobno dla każdego wymiaru.Alternatywa dla indeksów bitmapowych.

Page 20: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

20/125IBM DB2, L.Banachowski

Zbiór komórek - każda składająca się ze zbioru bloków

Komórka składa się z bloków stron rekordów (rozmiaru ekstentów) zapisywanych obok siebie na dysku.

Page 21: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

21/125IBM DB2, L.Banachowski

Złożony indeks blokowy

Umożliwiający znajdowanie bloków dla kombinacji wartości wymiarów.

Uporządkowanie leksykograficzne

Page 22: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

22/125IBM DB2, L.Banachowski

Tabela zorganizowana według wymiarów (MDC table)

CREATE TABLE Sales (sales_person VARCHAR(30) NOT NULL,region CHAR(5) NOT NULL,number_of_sales INT NOT NULL,year INT)ORGANIZE BY DIMENSIONS (sales_person, year);

Page 23: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

23/125IBM DB2, L.Banachowski

SQL

Page 24: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

24/125IBM DB2, L.Banachowski

SchematInstancja serwera składa się z baz danych. Każda baza danych składa się ze schematów, w tym jeden schemat tworzony automatycznie o nazwie identycznej z identyfikatorem autoryzacjiwłaściciela bazy danych. Jest to domyślny (bieżący) schemat w bazie danych.

CREATE SCHEMA MySchema;

Nazwa kwalifikowana obiektu w bazie danych: schemat.obiekt

CREATE TABLE Tab1 (kol int);

Tworzona w schemacie userid – czyli userid.Tab1

CREATE TABLE MySchema.Tab1 (kol int);

Tworzona w schemacie MySchema – czyli MySchema.Tab1

Page 25: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

25/125IBM DB2, L.Banachowski

Usunięcie schematu

DROP SCHEMA nazwa RESTRICT;

Możliwe tylko wtedy, gdy schemat jest pusty – nie zawiera obiektów (słowo RESTRICT – wymagane).

Page 26: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

26/125IBM DB2, L.Banachowski

Zmiana bieżącego schematu

VALUES CURRENT SCHEMA;SET CURRENT SCHEMA db2admin;CREATE TABLE tab1 (…); -- bieżący sch.CREATE TABLE schema1.tab1 (…); -- jawny schem.SET CURRENT SCHEMA USER;

Page 27: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

27/125IBM DB2, L.Banachowski

VALUES …

Wynikiem tabela o wartościach określonych przez wartości wyrażeń. Przykłady:

VALUES (1, 2, 3) - 1 wiersz o 3 kolumnach

VALUES (1,21),(2,22),(3,23) - 3 wiersze każdy o 2 kolumnach

VALUES CURRENT DATE – 1 wiersz z jedną kolumną

Page 28: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

28/125IBM DB2, L.Banachowski

Page 29: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

29/125IBM DB2, L.Banachowski

CREATE TABLE EMPLOYEE(EMPNO CHARACTER(6) PRIMARY KEY,FIRSTNME VARCHAR(12) NOT NULL,MIDINIT CHARACTER(1),LASTNAME VARCHAR(15) NOT NULL,WORKDEPT CHARACTER(3),PHONENO CHARACTER(4),HIREDATE DATE,JOB CHARACTER(8),EDLEVEL SMALLINT NOT NULL,SEX CHARACTER(1),BIRTHDATE DATE,SALARY DECIMAL(9,2),BONUS DECIMAL(9,2),COMM DECIMAL(9,2)) IN USERSPACE1;

EMPLOYEE (lub STAFF)

Page 30: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

30/125IBM DB2, L.Banachowski

DEPARTMENT (lub DEPT)

CREATE TABLE DEPARTMENT(DEPTNUMB SMALLINT NOT NULL,DEPTNAME VARCHAR(14),MANAGER SMALLINT,DIVISION VARCHAR(10),LOCATION VARCHAR(13))IN USERSPACE1;

Page 31: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

31/125IBM DB2, L.Banachowski

Tabele

CREATE TABLE tab1 (id INT);

CREATE TABLE tab2 LIKE tab1;

CREATE TABLE tab3 AS (SELECT * FROM tab1) ;

DESCRIBE TABLE tab1;

Page 32: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

32/125IBM DB2, L.Banachowski

Typy danych

SMALLINT, INT, BIGINTREAL, DOUBLE, DECIMAL(n,m)

CHAR(n), VARCHAR(n), LONG VARCHAR, CLOB(n)

GRAPHIC,VARGRAPHIC,LONG VARGRAPHIC, DBCLOB(n)

BLOB(n)

DATE, TIME, TIMESTAMP

DATALINK – obiekt zawierający link (URL) do zewnętrznego obiektu (atrybuty: link type, data location, comment)

XML

Page 33: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

33/125IBM DB2, L.Banachowski

Konwersje typów

Operacje na niekompatybilnych typach danych wymagają jawnej konwersji, np:

CHAR <-> NUMERIC

–- Przykład jawnej konwersjiCAST(col1 as DECIMAL(4,2)) DECIMAL(col1,4,2)

–- Metoda na sprawdzenie typów zapytaniaDESCRIBE OUTPUT (SELECT SUM(col1) FROM tab2);

Page 34: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

34/125IBM DB2, L.Banachowski

Kolumna IDENTITYCREATE TABLE invoice_data(invoice# INTEGER NOT NULLGENERATED ALWAYS AS IDENTITY,….PRIMARY KEY (invoice#));

GENERATED ALWAYS – zawsze generowany przez System (opcja domyślna),GENERATED BY DEFAULT – generowane przez System gdy użytkownik nie załączy wartości.Ostatnio wygenerowana wartość: IDENTITY_VAL_LOCAL()Generowane przed wyzwalaczem BEFORE. Możliwe parametry:AS IDENTITY (START WITH 100 INCREMENT BY 10)

Page 35: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

35/125IBM DB2, L.Banachowski

Jedna operacja: Wstaw i wyświetlSELECT MIN(cust#) AS minc, WYNIKMAX(cust#) AS maxc, ==============COUNT(*) AS rows MINC MAXC ROWSFROM FINAL TABLE ----------------- ---- ----(INSERT INTO customers 3 5 3VALUES (DEFAULT,'FRED','xxx'),

(DEFAULT,'DAVE','yyy'),(DEFAULT,'JOHN','zzz'));

INSERT INTO customers(name, address) VALUES (‘FRED’, ‘xxx’); -- lub

INSERT INTO customersVALUES (DEFAULT, ‘FRED’, ‘xxx’);

Wstawianie do tabeli z IDENTITY

Połączenie dwóch instrukcji w jedną –zwiększenie wydajności.

Page 36: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

36/125IBM DB2, L.Banachowski

SekwencjeCREATE SEQUENCE seq1 AS BIGINT

[START WITH 1INCREMENT BY 1NO MAXVALUENO CYCLECACHE 24];

CACHE – czy generować wartości sekwencji blokami

VALUES NEXTVAL FOR seq1 ;VALUES PREVVAL FOR seq1 ;VALUES PREVVAL FOR seq1 INTO :host-var;

ALTER SEQUENCE seq1 RESTART WITH 100;

Page 37: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

37/125IBM DB2, L.Banachowski

Przykład

CREATE SEQUENCE fred; SEQ#--------

1WITH temp1 (n1) AS 2VALUES (‘a’),(‘b’),(‘c’),(‘d’),(‘e’) 3SELECT NEXTVAL FOR fred AS seq# 4FROM temp1; 5

Page 38: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

38/125IBM DB2, L.Banachowski

Globalna stała za pomocą sekwencji

CREATE SEQUENCE biggest_sale_to_date AS INTEGER START WITH 345678INCREMENT BY 0;

Przechowywana w katalogu systemowym.

Page 39: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

39/125IBM DB2, L.Banachowski

Tymczasowa globalna tabelaDECLARE GLOBAL TEMPORARY TABLE fred(dept SMALLINT NOT NULL, avg_salary DEC(7,2) NOT NULL, num_emps SMALLINT NOT NULL) ON COMMIT PRESERVE ROWS; -- lub ON COMMIT DELETE ROWS

-- DECLARE, bo jej schemat nie jest zapisywany w katalogu systemowym i istnieje tylko na czas sesji (domyślny kwalifikatorschematu tabeli session tj. session.fred). Objęte mechanizmem wycofywania ale nie odtwarzania po awarii!

INSERT INTO fredSELECT dept, AVG(salary), COUNT(*) FROM staffWHERE id > 200 GROUP BY dept;

SELECT COUNT(*) AS cnt FROM fred;DELETE FROM fred WHERE dept > 80;

Page 40: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

40/125IBM DB2, L.Banachowski

Odróżnialny typ

Aby uniemożliwić wspólne operacje np. na dwóch różnych walutach.

CREATE DISTINCT TYPE Jap_Yen AS DECIMAL(15,2) WITH COMPARISONS;

Wartości typu JAP_YEN nie mogą być porównywane z wartościami typu DECIMAL(15,2)

Page 41: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

41/125IBM DB2, L.Banachowski

IndeksyCREATE INDEX idx1 ON tab1(col1) ;

CREATE INDEX idx1 ON tab1(col1) CLUSTER ;-- indeks pogrupowany na tabeli tab1, może byćniejednoznaczny.

Gdy indeks na kluczu głównym ma być pogrupowany, to jest istotna kolejność:CREATE TABLE – bez definiowania klucza głównego,CREATE INDEX … CLUSTERALTER TABLE … PRIMARY KEY

Page 42: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

42/125IBM DB2, L.Banachowski

Partycjonowana tabela1. Każda partycja tabeli w innej przestrzeni tabel

CREATE TABLE Customer (shipdate DATE, name CHAR(30)) IN ts1, ts2, ts3, ts4, ts5 PARTITION BY RANGE(shipdate)(STARTING FROM ('01/01/2009') ENDING AT ('12/31/2009') EVERY (3 MONTHS))

2. Każda partycja tabeli w innej partycji bazy danych

CREATE TABLE Sales (CUSTOMER VARCHAR(80), REGION CHAR(5), YEAR INTEGER) DISTRIBUTE BY HASH (YEAR) ORGANIZE BY DIMENSIONS (REGION, YEAR)

Page 43: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

43/125IBM DB2, L.Banachowski

Perspektywy

CREATE VIEW employee_view ASSELECT a.empno, a.firstnme, a.salary, a.workdeptFROM employee aWHERE a.salary >=

(SELECT AVG(b.salary)FROM employee bWHERE a.workdept = b.workdept);

Page 44: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

44/125IBM DB2, L.Banachowski

Perspektywy

CREATE TABLE p1(id INT CHECK (id < 100));CREATE TABLE p2(id INT CHECK (id >= 100));CREATE VIEW pv AS

SELECT id FROM p1 UNION ALLSELECT id FROM p2WITH CHECK OPTIONWITH ROW MOVEMENT;

WITH ROW MOVEMENT – przy aktualizacji wiersz naruszający warunek CHECK zmienia tabelę.

Page 45: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

45/125IBM DB2, L.Banachowski

Perspektywy lokalne

WITH temp1(id,name) AS (VALUES (1,'abc'),

(2,'bcd'),(3,'cde'))

SELECT id+100, UCASE(name) FROM temp1ORDER BY name DESC;

WITH temp1(col1) AS ( -- rekurencyjnaVALUES 0UNION ALLSELECT col1 + 1FROM temp1 WHERE col1 + 1 < 100

) SELECT * FROM temp1;

Page 46: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

46/125IBM DB2, L.Banachowski

WITH get_matching_rows AS -- perspektywa lokalna(SELECT id, name, salary -- podzapytanieFROM staffWHERE id < 50UNION ALL -- pełne zapytanieSELECT id, name, salary -- podzapytanieFROM staffWHERE id = 100)SELECT * -- podzapytanieFROM get_matching_rowsORDER BY id FETCH FIRST 10 ROWS ONLY FOR FETCH ONLY;

Terminologia SELECTów

Page 47: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

47/125IBM DB2, L.Banachowski

Tabela zmaterializowanego zapytania -materialized query table

(perspektywa zmaterializowana)CREATE TABLE staff_summary AS(SELECT dept, COUNT(*) AS count_rows, SUM(id) AS sum_idFROM staffGROUP BY dept)

DATA INITIALLY DEFERRED REFRESH IMMEDIATE;

- Tabela utworzona z klauzulami określającymi źródło AS oraz parametry odświeżania REFRESH:

• IMMEDIATE – budowa przy użyciu instrukcji REFRESH TABLE, następnie przy każdej zmianie źródłowych tabel, lub • DEFERRED – tylko za pomocą instrukcji REFRESH TABLE.

- Fraza DATA INITIALLY DEFERRED wymagana.- Można tworzyć indeks (ale nie PRIMARY KEY ani UNIQUE). - Można tworzyć indeks pogrupowany (CLUSTER).

Page 48: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

48/125IBM DB2, L.Banachowski

Instrukcja REFRESH TABLE

REFRESH TABLE staff_summary;

Dwa tryby odświeżania:

INCREMENTAL (przyrostowy) – w oparciu o dziennik zmian,

NOT INCREMENTAL – wyliczane od nowa całe zapytanie.

Dziennik zmian (staging table) – wymagany do odświeżania typu INCREMENTAL. Tworzony tak jak tabela, np:

CREATE TABLE emp_sumry_s(…) FOR staff_summary PROPAGATE IMMEDIATE;

Page 49: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

49/125IBM DB2, L.Banachowski

Alias – tabeli, perspektywy

CREATE ALIAS employee_al1 FOR employee;

Page 50: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

50/125IBM DB2, L.Banachowski

Nickname

Nazwa dla odległej tabeli lub nie-relacyjnego obiektu, przy użyciu którego w zapytaniach można ich używać tak jakby były zwykłymi tabelami.

CREATE NICKNAME emp FOR unixserver.production.employee;

Page 51: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

51/125IBM DB2, L.Banachowski

Katalog systemowy w schemacie SYSCAT

SELECTCAST(colname AS CHAR(18)) AS Name,CAST(typename AS CHAR(18)) AS Type, length AS Length,scale AS Scale,nulls AS Nulls

FROM syscat.columns WHERE tabname = 'MASTER' AND tabschema = 'PL38219'

ORDER BY colno;

Page 52: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

52/125IBM DB2, L.Banachowski

Więzy spójności

ALTER TABLE detail ADD CONSTRAINT detail_fk FOREIGN KEY (fk)

REFERENCES master(id) ON DELETE CASCADE;

ALTER TABLE tab1 ADD CONSTRAINT const1 CHECK (ABS(c1) > 100 OR c2 < 1000) ;

Page 53: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

53/125IBM DB2, L.Banachowski

Wyszukiwanie danych

Jak w Standardzie:v Kolumny wyliczanev Select countv Select distinctv Klauzule WHERE, ORDER BYv Klauzula GROUP BY … HAVINGv Predykaty LIKE, BETWEEN, IN

Page 54: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

54/125IBM DB2, L.Banachowski

Zmienne systemowe

CURRENT ISOLATIONCURRENT DATECURRENT LOCK TIMEOUTCURRENT PATHCURRENT SCHEMACURRENT TIMECURRENT TIMESTAMP USER

VALUES CURRENT DATE; -- lubSELECT CURRENT DATE FROM sysibm.sysdummy1;-- jak DUAL w Oracle

Page 55: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

55/125IBM DB2, L.Banachowski

Operacje na czasie

CURRENT TIMESTAMP + 1 DAYCURRENT DATE – 3 MONTHSCURRENT TIME – 1 HOUR - 80 MINUTES + 2 SECONDS DATE('2004-10-30') + 1 MONTH

MONTHNAME(CURRENT DATE) DAYOFYEAR(CURRENT TIMESTAMP) TO_CHAR(CURRENT TIMESTAMP,'YYYY-MM-DD HH24:MI:SS')

CHAR(CURRENT DATE, ISO) CHAR(CURRENT DATE, EUR)

Page 56: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

56/125IBM DB2, L.Banachowski

Operacje na ciągach znaków

'String1' CONCAT ' String2 'LENGTH(RTRIM('String1 ' )) LTRIM(' String1' )LCASE('String1' ) UCASE('String1' )SUBSTR('abcdef',2,3) REPLACE ( 'DINING', 'N', '--' )

SELECT SUBSTR(PROJNO,1, 2) AS PROJ_CLASS, PROJNAMEFROM PROJECTWHERE PROJNO LIKE 'IF%';

SELECT LASTNAME CONCAT ', ' CONCAT FIRSTNAMEFROM EMPLOYEEWHERE WORKDEPT = 'A00'ORDER BY NAME;

Page 57: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

57/125IBM DB2, L.Banachowski

Podzapytania

SELECT CAST(t.nr AS INT), t.empno, t.lastname, (SELECT deptname FROM department

WHERE t.workdept = deptno) deptnameFROM (SELECT empno, lastname, workdept,

ROW_NUMBER() OVER() AS nr FROM employee) AS t

WHERE t.nr <= 10

Page 58: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

58/125IBM DB2, L.Banachowski

Numerowanie rekordów(funkcje analityczne)

WITH temp AS (SELECT id, name, dept, years, salary, RANK() OVER(ORDER BY salary DESC) AS rowFROM staff

) SELECT * FROM temp WHERE row > 5 and row <= 10ORDER BY row;

Rank = 1+ liczba rekordów mniejszych od niego w danym porządku (mogą więc być przerwy w numeracji, jeśli dwa lub więcej rekordów ma ten sam rank w danym porządku).Rownumber, row_number = kolejny numer (bez przerw).

Page 59: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

59/125IBM DB2, L.Banachowski

CASE

SELECT FIRSTNME, LASTNAME,CASE

WHEN salary < 40000 THEN 'Należy sie podwyżka'WHEN salary > 40000 and salary < 90000 THEN 'OK'ELSE 'Przeplacamy'

END AS commentFROM EMPLOYEE;

Page 60: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

60/125IBM DB2, L.Banachowski

Złączenia

*) INNER JOIN … ON …*) LEFT OUTER JOIN … ON …*) RIGHT OUTER JOIN … ON …*) FULL OUTER JOIN … ON …

Page 61: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

61/125IBM DB2, L.Banachowski

Klauzule FETCH FIRST i OPTIMIZE FOR

SELECT years, name, idFROM staffORDER BY years DESCFETCH FIRST 10 ROWS ONLY;

Zamiast FETCH FIRST n ROWS ONLY można użyćOPTIMIZE FOR n ROWS – wtedy zwracane są wszystkie wiersze, ze wskazówką dla optymalizatora, że przekazywanie wierszy do klienta będzie się odbywać blokami n wierszy.

Może być używana też bez ORDER BY.

Page 62: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

62/125IBM DB2, L.Banachowski

Funkcja TABLE

SELECT a.id, a.dept, a.salary , b.deptsalFROM staff a, TABLE(SELECT b.dept, SUM(b.salary) AS deptsalFROM staff b WHERE b.dept = a.deptGROUP BY b.dept) AS bWHERE a.id < 40ORDER BY a.id;

Wymagana gdy podzapytanie odwołuje się do wierszy zewnętrznych tabel. • Ale można było zastosować tu operator INNER JOIN bez korzystania z TABLE.

Page 63: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

63/125IBM DB2, L.Banachowski

Przykład z funkcją TABLE

SELECT id, salary AS sal, comm AS com, w, typFROM staff, TABLE(VALUES (salary,'SAL'), (comm, 'COM') ) AS tab(w, typ)WHERE id < 40ORDER BY id, typ;

Page 64: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

64/125IBM DB2, L.Banachowski

INSERT

v Create table A(liczba int, napis varchar(10));v Insert into A values (1,'aaa');v Insert into A (liczba) values(2);v Insert into A values (3,'ccc'),(4,'ddd'),(5,'eee');v Select * from A;v Create table B(liczba int, napis varchar(10));v Insert into B (select * from A) ;

Page 65: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

65/125IBM DB2, L.Banachowski

Wstawianie do dwóch tabel

CREATE TABLE Us_customer CREATE TABLE Intl_customer(Cust# INTEGER NOT NULL, (Cust# INTEGER NOT NULL,Cname CHAR(10) NOT NULL, Cname CHAR(10) NOT NULL,Country CHAR(3) NOT NULL, Country CHAR(3) NOT NULL,CHECK (Country = 'USA'), CHECK (Country <> 'USA'),PRIMARY KEY (Cust#)); PRIMARY KEY (Cust#));

INSERT INTO(SELECT * FROM Us_customerUNION ALL(SELECT * FROM Intl_customer)VALUES (111,'Fred','USA'), (222,'Dave','USA') ,(333,'Juan','MEX'));Połączenie dwóch instrukcji w jedną w celu zwiększenia wydajności.

Page 66: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

66/125IBM DB2, L.Banachowski

Modyfikowanie danych - UPDATE

v Update B set liczba = liczba+10 where liczba<4;

v Update B set liczba = liczba+10, napis = 'cccc' where liczba = 12;

v Update A set (liczba,napis) =(select liczba, napis from B where liczba = 22) where liczba = 2;

Page 67: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

67/125IBM DB2, L.Banachowski

Usuwanie danych - DELETE

v Delete from C where …

v Delete from (select rownumber() over(order by liczba) as rowid from A) where rowid>4;

Page 68: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

68/125IBM DB2, L.Banachowski

Wyświetlanie modyfikowanych wierszyOLD TABLE, NEW TABLE, FINAL TABLE

v Select … from OLD TABLE (Delete from…v Select * from [NEW|FINAL] TABLE (Insert into A

values(10,'kkk'),(11,'mmm'),(12,'ooo'));v Select … from [NEW|FINAL] TABLE (Update….

– NEW – stan po wykonaniu instrukcji a przed wykonaniem wyzwalaczy AFTER i akcji referencyjnych

– FINAL – stan na sam koniec po wykonaniu wyzwalaczy AFTER i akcji referencyjnych

Połączenie dwóch instrukcji w jedną w celu zwiększenia wydajności.

Page 69: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

69/125IBM DB2, L.Banachowski

MERGEWłóż wiersze tabeli u do tabeli g stosując UPDATE gdy wiersz z datą istnieje w g, wpp stosując INSERT.

MERGE INTO main gUSING (SELECT data,swieto FROM upd_main) uON (g.data = u.data) WHEN MATCHED THEN UPDATE SET swieto = u.swieto

WHEN NOT MATCHED THEN – tylko INSERT lub SIGNALINSERT (data,swieto)

VALUES (u.data, u.swieto)

[NOT] MATCHED [AND warunek_wyszukiwania]Połączenie INSERT, UPDATE, DELETE na jednej tabeli. Zwiększenie wydajności.

Page 70: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

70/125IBM DB2, L.Banachowski

UNION, INTERSECT, EXCEPT

v UNION i UNION ALLv INTERSECT i INTERSECT ALLv EXCEPT i EXCEPT ALL

Page 71: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

71/125IBM DB2, L.Banachowski

TRANSAKCJE

ALTER TABLE tabela ACTIVATE NOT LOGGED INITIALLY;

* Transakcje rozpoczynają się niejawnie.* Każda baza danych w DB2 jest transakcyjna.* Można wyłączyć tworzenie pozycji transakcji w dzienniku transakcji na poziomie tabeli na czas trwania transakcji (do jej końca).

Page 72: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

72/125IBM DB2, L.Banachowski

Poziomy izolacji

* UR : brak blokad, chyba, że dany rekord jest zmieniany (UNCOMMITTED READ)* CS : blokada na wierszu tylko przy odczycie rekordu (COMMITTED READ)* RS : blokada do odczytu utrzymywana do końca transakcji (REPEATABLE READ)* RR : niezmienny wynik każdego zapytania w trakcie trwania transakcji (SERIALIZABLE)

Odejście od nazw w Standardzie.

Page 73: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

73/125IBM DB2, L.Banachowski

Blokowane obiekty

Page 74: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

74/125IBM DB2, L.Banachowski

Blokady na tabeli

IX Intention eXclusive

X eXclusive

Z superexclusive

IS Intention Share

IN Intent None

Obejmuje też blokady wierszy Tylko blokada tabeli

SIX Share with Intention eXclusive

S Share

U Update

Z – do wykonania ALTER i DROP na tabeli oraz CREATE i DROP na indeksie tabeli.

Dla transakcji realizowanej w trybie READ UNCOMMITTED

Page 75: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

75/125IBM DB2, L.Banachowski

Blokady na wierszu

S

U

X

W

NS

NW

Blokada wiersza

blokady wierszy

S, U, X lub Z

Minimalna wspomagającablokada na tabeli

Aplikacja nie uzyskuje

jeśli założyła blokadę na tabeli:

IS

IX

IX

IX

IS

IX

Share

Update

eXclusive

Weak exclusive

Next key Share

Next key Weak exclusive

Page 76: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

76/125IBM DB2, L.Banachowski

Dodatkowe rodzaje wierszowych blokad

v Weak Exclusive W – zakładana na wiersz wstawiany do tabeli (na tabeli IX) – słabsza niż X na tym wierszu.

v Next Key Weak Exclusive NW – gdy do indeksu jest dodawana nowa pozycja (na tabeli IX) – słabsza niż X na tym wierszu.

v Next Key Share NS – zakładana na wiersz podczas pełnego odczytu tabeli w trybie READ COMMITTED i REPEATABLE READ (na tabeli IS) –słabsza niż S na tym wierszu.

Page 77: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

77/125IBM DB2, L.Banachowski

Kompatybilność trybów blokad

U

YES

NO

NO

NO

YES

NO

NS

YES

YES

NO

NO

YES

YES

W

NO

NO

NO

NO

NO

YES

BA

IN

IS

S

IX

SIX

U

X

Z

Tabelowe

BA

S

U

X

W

NS

NW

Wierszowe

IS

YES

YES

YES

YES

YES

YES

NO

NO

S

YES

YES

YES

NO

NO

YES

NO

NO

IX

YES

YES

NO

YES

NO

NO

NO

NO

IN

YES

YES

YES

YES

YES

YES

YES

NO

X

NO

NO

NO

NO

NO

NO

S

YES

YES

NO

NO

YES

NO

NW

NO

NO

NO

YES

YES

NO

SIX

YES

YES

NO

NO

NO

NO

NO

NO

U

YES

YES

YES

NO

NO

NO

NO

NO

X

YES

NO

NO

NO

NO

NO

NO

NO

Z

NO

NO

NO

NO

NO

NO

NO

NO

Page 78: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

78/125IBM DB2, L.Banachowski

Blokady explicite-- Zapytanie tylko do odczytu

SELECT * FROM tab1 FOR READ ONLY;

-- Zapytanie może uaktualniać rekordy w trakcie przemieszczania się kursora po zbiorze wynikowym

SELECT * FROM tab1 FOR UPDATE;

-- Do instrukcji SELECT, SELECT INTO, DELETE, UPDATE można dołączyć poziom izolacji: WITH RR, WITH RS, WITH CS, WITH UR.

Page 79: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

79/125IBM DB2, L.Banachowski

Konwersja blokady

v Gdy aplikacja posiadając już pewną blokadę na obiekcie, chce zamienić tę blokadę na silniejszą (np. U na X, IS na S, IX na X) – Silniejsza blokada może być przyznana lub nie.

v Przykład– Aplikacja wybiera wiersz w tabeli używając klauzuli FOR

UPDATE u Na wiersz jest zakładana blokada U (Update)

– Aplikacja dokonuje modyfikacji wiersza używając klauzuli WHERE CURRENT OFu Zachodzi konwersja blokady U na X

Page 80: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

80/125IBM DB2, L.Banachowski

Parametry inicjalizacyjne bazy danych dotyczące blokad

Locklist – ilość miejsca pamięci do użycia przez blokady.

Maxlocks – maksymalny procent miejsca pamięci z Locklistprzeznaczony do użycia przez pojedynczą transakcję.

Gdy transakcja przekroczy Maxlocks, system zamienia blokady na wierszach na blokady na tabelach (eskalacja blokad).

Page 81: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

81/125IBM DB2, L.Banachowski

Blokada tabeli

ALTER TABLE tabela LOCKSIZE TABLE; -- (blokowanie tabeli zamiast domyślnie wierszy)

Wskazane, gdy DML dotyczy większości wierszy dużej tabeli.

Z powrotem do blokowania wierszy (które jest domyślne):

ALTER TABLE tabela LOCKSIZE ROW;

LOCK TABLE tabela IN [SHARE|EXCLUSIVE] MODE

(blokada zwalniana na koniec transakcji)

Page 82: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

82/125IBM DB2, L.Banachowski

Blokada bazy danych/przestrzeni tabel(explicite)

CONNECT TO database IN [EXCLUSIVE|SHARE] MODE

• Blokada bazy danych:CONNECT TO database IN EXCLUSIVE MODE

• Blokada przestrzeni tabel:QUIESCE table-spaces FOR TABLE table-nameINTENT FOR UPDATE;

Page 83: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

83/125IBM DB2, L.Banachowski

Tworzenie typów obiektowych CREATE TYPE DEPT AS (DEPT NAME VARCHAR(20), MAX_EMPS INT) REF USING INT MODE DB2SQL -- MODE DB2SQL wymaganyCREATE TYPE EMP AS (NAME VARCHAR(32), SERIALNUM INT, DEPT REF(DEPT), SALARY DECIMAL(10,2)) MODE DB2SQL CREATE TYPE MGR UNDER EMP AS (BONUS DECIMAL(10,2)) MODE DB2SQLEwentualna specyfikacja metody po słowie kluczowym METHOD. Niezależnie, implementacja metody:CREATE METHOD BONUS (RATE DOUBLE) FOR EMPRETURN SELF..SALARY * RATE

Page 84: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

84/125IBM DB2, L.Banachowski

Przykład tabeli z podtabelamiHierarchia typów obiektowych:Typy obiektowe: BusinessUnit_t, Person_tPodtypy: Student_t UNDER Person_t,

Employee_t UNDER Person_t, Manager_t UNDER Employee_t, Architect_t UNDER Employee_t

Page 85: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

85/125IBM DB2, L.Banachowski

Tworzenie hierarchii tabel odpowiadającej hierarchii typów

CREATE TABLE BUnit OF BusinessUnit_t (REF IS Oid USER GENERATED);

CREATE TABLE Person OF Person_t (REF IS Oid USER GENERATED);

CREATE TABLE Employee OF Employee_t UNDER Person INHERIT SELECT PRIVILEGES -- wymagana klauzula dla podtabel(SerialNum WITH OPTIONS NOT NULL, Dept WITH OPTIONS SCOPE BUnit );

CREATE TABLE Student OF Student_t UNDER Person INHERIT SELECT PRIVILEGES;

CREATE TABLE Manager OF Manager_t UNDER EmployeeINHERIT SELECT PRIVILEGES;

CREATE TABLE Architect OF Architect_t UNDER EmployeeINHERIT SELECT PRIVILEGES;

Page 86: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

86/125IBM DB2, L.Banachowski

Instrukcje SQL na nadtabeli i jej podtabelach

Instrukcje SELECT, UPDATE, DELETE operujące na nadtabeli, domyślnie działają również na wszystkich wierszach jej podtabel. Np. UPDATE na tabeli Employee dotyczy wierszy tabel Employee, Manager i Architect, ale UPDATE na tabeli Manager dotyczy tylko wierszy tabeli Manager.

Aby ograniczyć działanie instrukcji wyłącznie do danej tabeli należy użyć opcji ONLY (np. ONLY Employee).

Page 87: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

87/125IBM DB2, L.Banachowski

Jak zaszyfrować kluczowe dane?

SET ENCRYPTION PASSWORD = 'Ben123';INSERT INTO EMP(SSN) VALUES ENCRYPT ('289-46-8832');

INSERT INTO EMP(SSN) VALUES ENCRYPT ('289-46-8832', 'Ben123');

SELECT DECRYPT_CHAR (SSN,'Ben123') FROM EMP;

Page 88: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

88/125IBM DB2, L.Banachowski

LBAC (Label Based Access Control)SALARYIDLBACNo

LBAC

450001057800020083000904600025333000755400010082000102560002503000060450005070000505000010060000255

SELECT * FROM EMPWHERE SALARY >= 50000

& Poziom dostępu użytkownika = 100

Użytkownicy na poziomie 100 mają dostęp do wierszy: ID <= 100 i salary >= 50000 (na zielono)

Gdy opcja LBAC nie jest włączona, użytkownicy za pomocąpowyższego zapytania mają dostęp do wierszy: salary >= 50000 (na czerwono)

Ułatwienie zarządzania uprawnieniami dostępu użytkowników do danych

Poziom dostępu definiowany dla tabel i wierszy tabel.

Page 89: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

89/125IBM DB2, L.Banachowski

Język procedur składowanych

SQL Procedural Language

(SQL PL)

Page 90: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

90/125IBM DB2, L.Banachowski

Przypisanie wartości zmiennym

Instrukcje w kodzie:

SET zmienna = wyrażenie

VALUES wyrażenie, … INTO zmienna, …

Page 91: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

91/125IBM DB2, L.Banachowski

BEGINDECLARE v_var1 CHAR(20);DECLARE v_var2 INTEGER;DECLARE v_var3 TIMESTAMP;DECLARE v_var4 SMALLINT DEFAULT 99;

SELECT name INTO v_var1 FROM staffFETCH FIRST 1 ROW ONLY;

SET v_var2 = 100;VALUES CURRENT TIMESTAMP INTO v_var3;VALUES (p_par1,99) INTO v_var4,v_var2;

END

Instrukcja złożona (blok), zmienne

Page 92: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

92/125IBM DB2, L.Banachowski

BEGIN ATOMIC… -- SQL’e traktowane są jak jedno polecenie

END-- nieobsłużony błąd -> zatrzymanie wykonywania ->-- wszystkie zmiany zostają wycofane

BEGIN ATOMIC nie może być zagnieżdżony w BEGIN ATOMIC---------------------------------------------BEGIN NOT ATOMIC -- to jest domyślna opcja…

END-- nieobsłużony błąd -> zatrzymanie wykonywania ->-- Zmiany pozostają. Konieczne ręczne wycofanie.

ATOMIC, NOT ATOMIC

Page 93: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

93/125IBM DB2, L.Banachowski

lab1: BEGIN DECLARE v_id INT;

lab2: BEGIN DECLARE v_id INT;SET lab1.v_id = 1;SET lab2.v_id = 10;SET v_id = 100;

END lab2;

END lab1

Etykiety instrukcji złożonej

Page 94: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

94/125IBM DB2, L.Banachowski

IF v_var = 1 THENUPDATE …

ELSEINSERT …

END IF;---------------------------------------------CASEWHEN v_var > 0 THEN …WHEN v_var > 10 THEN …ELSE …

END CASE;

Instrukcje warunkowe

Page 95: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

95/125IBM DB2, L.Banachowski

WHILE (var1 = 1) DO…END WHILE;---------------------------------------------REPEAT…UNTIL (var1 < 100) END REPEAT;---------------------------------------------label:LOOP… LEAVE label;… ITERATE label;END LOOP;---------------------------------------------GOTO label;

Iteracje

Page 96: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

96/125IBM DB2, L.Banachowski

Instrukcja złożona i WHILE

BEGIN ATOMICDECLARE cnt INT DEFAULT 0;

WHILE (cnt < 1000) DOINSERT INTO Tab1 VALUES (cnt, ceiling(rand()*1000) );SET cnt=cnt+1;

END WHILE;END

Średniki oddzielają składowe instrukcje w instrukcji złożonej. Średnik nie może kończyć zewnętrznej instrukcji złożonej ani też końca instrukcji CREATE PROCEDURE.

W skryptach można określić terminator przy użyciu -- #SET DELIMITER

Page 97: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

97/125IBM DB2, L.Banachowski

FOR loop_name AS SELECT col1,… FROM …DOSET var1 = loop_name.col1;…

END FOR;

Instrukcja FOR

Page 98: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

98/125IBM DB2, L.Banachowski

Przykład

BEGIN ATOMICDECLARE cntr SMALLINT DEFAULT 1;FOR V ASSELECT id AS idval FROM staffWHERE id < 80 ORDER BY id

DOUPDATE staff SET comm = cntr WHERE id = V.idval;SET cntr = cntr + 1;

END FOR;END

Page 99: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

99/125IBM DB2, L.Banachowski

BEGIN ATOMICDECLARE v_var2 INTEGER;CREATE TABLE mytab(id INT);CREATE INDEX mytab_idx ON mytab(id);BEGINDECLARE v_var4 INTEGER DEFAULT 100;INSERT INTO mytab(id) VALUES (99),(v_var4);GET DIAGNOSTICS v_var2 = ROW_COUNT;SET p_result = 'L.wierszy: '||char(v_var2);END;END

GET DIAGNOSTICS wymagane, aby uzyskać ROW_COUNT!

Instrukcja złożona

Page 100: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

100/125IBM DB2, L.Banachowski

ITERATE, LEAVEBEGIN ATOMICDECLARE cntr INT DEFAULT 0;whileloop:WHILE cntr < 60 DO

SET cntr = cntr + 10;UPDATE staff SET salary = cntr WHERE id = cntr;IF RAND() < 0.5 THEN LEAVE whileloop;ELSEIF RAND() < 0.2 THEN ITERATE whileloop; ELSE UPDATE staff SET comm = cntr + 1

WHERE id = cntr;END IF;

END WHILE;END

Page 101: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

101/125IBM DB2, L.Banachowski

SIGNAL

Powtarzanie iteracji losową liczbę razy, po czym wygenerowanie komunikatu o wyjątku (jak RAISERROR w SQLServer).

BEGIN ATOMICDECLARE cntr INT DEFAULT 1;DECLARE emsg CHAR(20);whileloop:WHILE RAND() < .99 DO

SET cntr = cntr + 1;END WHILE;SET emsg = '#loops: ' || CHAR(cntr);SIGNAL SQLSTATE '75001' SET MESSAGE_TEXT = emsg;

END

Page 102: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

102/125IBM DB2, L.Banachowski

CREATE PROCEDURE proc01 () BEGINEND

call proc01()

Najprostsza procedura

Page 103: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

103/125IBM DB2, L.Banachowski

Przykład

CREATE PROCEDURE foo ( IN v_workdept CHAR(3))LANGUAGE SQLP1: BEGIN

CASE v_workdeptWHEN 'A00'THEN UPDATE department

SET deptname = 'DATA ACCESS 1';WHEN 'B01'THEN UPDATE department

SET deptname = 'DATA ACCESS 2';ELSE UPDATE department

SET deptname = 'DATA ACCESS 3';END CASE;

END P1

Page 104: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

104/125IBM DB2, L.Banachowski

CREATE PROCEDURE p01 (IN p_par1 INTEGER,INOUT p_par2 DECIMAL(8,2),OUT p_par3 CHAR(20)

) SPECIFIC proc1BEGIN-- ciało procedury

END

call p01(99,x,y)

Parametry procedur

SPECIFIC – dodatkowa nazwa procedury. Może być użyta przy komentowaniu i usuwaniu procedury. Gdy nie podana, generowana przez system.

Page 105: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

105/125IBM DB2, L.Banachowski

PrzykładCREATE PROCEDURE sales_status

(IN quota INTEGER, OUT sql_state CHAR(5))DYNAMIC RESULT SETS 1LANGUAGE SQL

BEGINDECLARE SQLSTATE CHAR(5);DECLARE rs CURSOR WITH RETURN FORSELECT sales_person, SUM(sales) AS total_sales

FROM salesGROUP BY sales_personHAVING SUM(sales) > quota;

OPEN rs;SET sql_state = SQLSTATE;

END Po wykonaniu procedury dostępny jest zbiór wynikowy poprzez otwarty kursor. Ukrycie w procedurze instrukcji SELECT zwracających zbiory wierszy.

Page 106: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

106/125IBM DB2, L.Banachowski

Funkcja skalarnaCREATE FUNCTION get_sal(inval SMALLINT)RETURNS DECIMAL(7,2)RETURN SELECT salary FROM staff WHERE id = inval

SELECT id AS id, get_sal(id) AS salaryFROM staffWHERE id < 40 ORDER BY id;

Wynik:Instrukcje DML nie są dozwolone.

ID SALARY-- -------------10 98357.5020 78171.25 30 77506.75

Page 107: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

107/125IBM DB2, L.Banachowski

Funkcja tabelowaCREATE FUNCTION get_staff()RETURNS TABLE (ID SMALLINT, name VARCHAR(9), YR SMALLINT) RETURN SELECT id, name, years FROM staff

SELECT * FROM TABLE(get_staff()) AS s WHERE s.id < 40 ORDER BY s.id;

ID NAME YR-- -------- -------10 Sanders 720 Pernal 830 Marenghi 5

Page 108: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

108/125IBM DB2, L.Banachowski

Przykład

CREATE FUNCTION NumList(max_num INTEGER)RETURNS TABLE(num INTEGER)RETURN

WITH temp1 (num) AS(VALUES (0)

UNION ALLSELECT num + 1FROM temp1WHERE num < max_num)SELECT numFROM temp1

Page 109: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

109/125IBM DB2, L.Banachowski

Przykład

CREATE FUNCTION dpt2 ()RETURNS TABLE (dept SMALLINT, #names SMALLINT)BEGIN ATOMICRETURN

SELECT dept, count(*) FROM staffGROUP BY dept ORDER BY dept;

END

SELECT * FROM TABLE(dpt2()) T ORDER BY T.dept;

Page 110: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

110/125IBM DB2, L.Banachowski

DECLARE SQLSTATE CHAR(5);DECLARE cursor1 CURSOR FOR SELECT … ;

OPEN cursor1;

FETCH FROM cursor1 INTO var1, var2, … ;WHILE (SQLSTATE = ’00000’)DO…

END WHILE;CLOSE cursor1;

Kursory

Page 111: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

111/125IBM DB2, L.Banachowski

DECLARE SQLSTATE CHAR(5);DECLARE cursor1 CURSOR FOR SELECT … FOR UPDATE;

-- domyślnie: FOR READ ONLYOPEN cursor1;

FETCH FROM cursor1 INTO var1, var2, … ;WHILE (SQLSTATE = ’00000’)DO …DELETE FROM tab1 WHERE CURRENT OF cursor1;…UPDATE tab1 SET … WHERE CURRENT OF cursor1;…

END WHILE;

Kursory – FOR UPDATE

Page 112: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

112/125IBM DB2, L.Banachowski

DECLARE cursor1 CURSOR WITH HOLD FOR SELECT … FOR UPDATE;

……COMMIT;-- teraz kursor cursor1 nie zostanie zamkniętylubROLLBACK;-- wszystkie kursory są zamykane-- wszystkie blokady są zwalniane-- lokatory BLOB-ów są zwalniane

Kursory – WITH HOLD

Page 113: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

113/125IBM DB2, L.Banachowski

CREATE PROCEDURE proc01 ()DYNAMIC RESULT SETS 1

BEGINDECLARE cursor1 CURSOR WITH RETURN FOR SELECT …;

OPEN cursor1;-- by przekazać zbiór wynikowy dalej-- kursor nie może być zamknięty

END

Kursory – WITH RETURN

Page 114: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

114/125IBM DB2, L.Banachowski

DECLARE SQLSTATE CHAR(5) DETAULT ’00000’;-- ISO/ANSI SQL92-- ’00xxx’ <- success-- ’01xxx’ <- warning-- ’02xxx’ <- not found-- other <- error

DECLARE SQLCODE INT DETAULT 0;-- tylko DB2 -- 0 <- success-- >0 <- warning-- 100 <- not found-- <0 <- error

Deklaracje wymagane, aby móc skorzystać z wartości!

Podstawowa obsługa błędów – zmienne systemowe SQLSTATE, SQLCODE

Page 115: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

115/125IBM DB2, L.Banachowski

Deklaracja nazwanego wyjątku

DECLARE nazwa-wyjątku CONDITION FOR SQLSTATE ’xxxxx’;

Specyfikacja obsługi wyjątkuDECLARE CONTINUE HANDLER FOR SQLSTATE ’xxxxx’

EXIT SQLEXCEPTIONUNDO SQLWARNING

NOT FOUNDnazwa-wyjątku

instrukcja-SQL;

Obsługa wyjątków

Page 116: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

116/125IBM DB2, L.Banachowski

CREATE PROCEDURE divide ( IN numerator INTEGER,IN denominator INTEGER, OUT result INTEGER)LANGUAGE SQLBEGINDECLARE overflow CONDITION FOR SQLSTATE '22003';DECLARE CONTINUE HANDLER FOR overflow

RESIGNAL SQLSTATE '22375' ; - zmiana wyjątkuIF denominator = 0 THEN

SIGNAL overflow; - wymuszenie wyjątkuELSE

SET result = numerator / denominator;END IF;

END

Przykład

Page 117: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

117/125IBM DB2, L.Banachowski

PrzykładCREATE PROCEDURE ITERATOR() LANGUAGE SQLBEGINDECLARE at_end INTEGER DEFAULT 0;DECLARE not_found CONDITION FOR SQLSTATE '02000'; -dekl.wyj. not_foundDECLARE c1 CURSOR FOR ....;DECLARE CONTINUE HANDLER FOR not_foundSET at_end = 1;OPEN c1;ftch_loop1: LOOP

FETCH c1 INTO v_dept, v_deptname, v_admdept;IF at_end = 1 THEN

LEAVE ftch_loop1;ELSEIF v_dept = 'D01' THEN

ITERATE ftch_loop1;END IF;INSERT INTO department (deptno, deptname, admrdept)VALUES ( 'NEW', v_deptname, v_admdept);

END LOOP;CLOSE c1;END

1. Nie znaleziono wiersza – warunek not_found3. Kontynuuj

2. Obsługa wyjatku not_foundUstaw at_end=1

Page 118: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

118/125IBM DB2, L.Banachowski

SET string1 = ’UPDATE tab1 SET column1 =’ ||CHAR(variable1);

EXECUTE IMMEDIATE string1;

GET DIAGNOSTICS variable1 = ROW_COUNT;

Dynamiczny SQL - EXECUTE IMMEDIATE

Page 119: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

119/125IBM DB2, L.Banachowski

DECLARE statement1 STATEMENT;

SET string1 = ’UPDATE tab1 SET col1 = ? ’ || ’WHERE col2 = ?’;

PREPARE statement1 FROM string1;

EXECUTE statement1 USING var1,var2;

Dynamiczny SQL - PREPARE

Page 120: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

120/125IBM DB2, L.Banachowski

-- Załóżmy, że sygnatura procedury wygląda:-- schema1.procedure1(IN,INOUT,OUT)

DECLARE statement1 STATEMENT;

SET string1 = ’CALL schema1.procedure1’ || ’(?,?,?)’;

PREPARE statement1 FROM string1;

EXECUTE statement1 INTO var1,var2USING var3,var4;

Dynamiczny SQL - parametryzowanie

Page 121: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

121/125IBM DB2, L.Banachowski

DECLARE rs1 RESULT_SET_LOCATOR VARYING;DECLARE rs2 RESULT_SET_LOCATOR VARYING;

CALL procedure1(); -- otwiera dwa kursoryASSOCIATE RESULT SET LOCATOR (rs1, rs2) WITH PROCEDURE procedure1;

ALLOCATE cursor1 CURSOR FOR RESULT SET rs1;ALLOCATE cursor2 CURSOR FOR RESULT SET rs2;-- ALLOCATE zawiera w sobie definicję kursoraFETCH FROM cursor1 INTO var1, var2;FETCH FROM cursor2 INTO var3;

Pobieranie zbiorów wynikowych(na serwerze bazy danych)

Page 122: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

122/125IBM DB2, L.Banachowski

Wyzwalacze- Wykonywane przed operacją BEFORE- Wykonywane po operacji AFTER- Wykonywane na perspektywie INSTEAD OFOperacje: INSERT, DELETE, UPDATEFOR EACH STATEMENT albo FOR EACH ROW

CREATE TRIGGER ReorderAFTER UPDATE OF ON_HAND, MAX_STOCKED ON PartsREFERENCING NEW AS N_ROWFOR EACH ROWWHEN (N_ROW.ON_HAND < 0.10 * N_ROW.MAX_STOCKED) BEGIN ATOMICCALL ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED - N_ROW.ON_HAND, N_ROW.PARTNO);END-- Podobnie OLD

Page 123: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

123/125IBM DB2, L.Banachowski

Składnia wyzwalacza

Page 124: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

124/125IBM DB2, L.Banachowski

Użycie NEW_TABLE w wyzwalaczu definiowanym dla instrukcji

CREATE TRIGGER Trans_his_ins1AFTER INSERT ON Cust_balanceREFERENCING NEW_TABLE AS newtabFOR EACH STATEMENTMODE DB2SQL

INSERT INTO Cust_transSELECT MIN(cust#), MAX(cust#), COUNT(*), SUM(balance), 'I',

CURRENT TIMESTAMPFROM Newtab

Przy UPDATE może użyć i OLD_TABLE i NEW_TABLE.

Page 125: IBM DB2 –cechy warte odnotowania · IBM DB2, L.Banachowski IBM DB2 ... „DB@ UDB V8.2 SQL Cookbook” -dostępna w ... DB2 v9 Fundamentals,DB2 SQL Workshop, DB2 SQLWorkshopfor

125/125IBM DB2, L.Banachowski

GRANT EXECUTE ON PROCEDURE proc1 TO user1;

Instrukcje SQL statyczne:- dziedziczą uprawnienia właściciela

Instrukcje SQL dynamiczne:- uprawnienia tego, kto wykonuje

Uprawnienia: statyczny / dyn. SQL