wyk_ad_1
DESCRIPTION
PL/SQLTRANSCRIPT
-
PL/SQL
Cz 1 Oracle SQL
Piotr Medo
-
Cele
Rnice w budowie zapyta bazodanowych pomidzy bazami SQL Server oraz Oracle
Standardowe funkcje Oracle SQL
2
-
Wprowadzenie do SQL
SQL (Structured Query Language)
DDL (Data Definition Language) suy do tworzenia, modyfikowania i usuwania obiektw bazodanowych np. CREATE TABLE
DML (Data Manipulation Language) suy do modyfikowania oraz przegldania danych (INSERT, UPDATE, DELETE, SELECT)
3
-
Relacja (Tabela)
ID_OSOBY IMIE_OSOBY DATA_URODZENIA
1 ADAM 01-01-1990
2 ANDRZEJ 31-05-1975
3 ANNA 04-03-1970
4 BEATA 20-10-1095
KARTOTEKA
Nazwa relacji
(tabeli)
Atrybut (kolumna) liczbowy
Atrybut (kolumna) tekstowy
Atrybut (kolumna) daty
Krotki (Rekordy)
4
-
Budowa zapytania SQL
SELECT kolumny
FROM nazwy_tabel
WHERE warunki i zczenia;
5
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
SELECT nie wymaga FROM np. SELECT GETDATE()
SELECT zawsze wymaga FROM W kadej instalacji bazy danych Oracle istnieje tabela o nazwie DUAL, ktra zawsze zawiera jeden element np. SELECT SYSDATE FROM DUAL
6
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Kolumny mog by autonumerowane (waciwo IDENTITY)
Nie istnieje waciwo kolumny umoliwiajca autonumerowanie. Istniej sekwencje obiekty generujce kolejne liczby, bezpieczne w korzystaniu przez wiele wtkw. Na przykad, aby wstawi warto do tabeli faktury naley wykona polecenie: INSERT INTO faktury (ID_FAKTURY, KWOTA) VALUES(faktury_sekwencja.NEXTVAL, 1000);
7
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Brak Oracleowej konwencji zewntrznego czenia tabel
Istniej dwie konwencje zewntrznego czenia tabel ISO: SELECT p.imie, d.nazwa_dzialu FROM pracownicy p LEFT OUTER JOIN dzial d ON p.id_dzialu = d.id_dzialu oraz Oracleowa: SELECT p.imie, d.nazwa_dzialu FROM pracownicy p, dzial d WHERE p.id_dzialu = d.id_dzialu (+)
8
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Moliwe czenia tabel: INNER JOIN CROSS JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN
Moliwe czenia tabel: INNER JOIN JOIN USING NATURAL JOIN CROSS JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN
9
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Jeeli kolumny, po ktrych czymy dwie tabele maj te same nazwy w obu tabelach, moemy uy czenie JOIN USING.
Ponisze zapytania s rwnowane:
SELECT p.imie, d.nazwa_dzialu FROM pracownicy p JOIN dzial d ON p.id_dzialu = d.id_dzialu
SELECT p.imie, d.nazwa_dzialu FROM pracownicy p JOIN dzial d USING (dzial_id)
10
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Za pomoc NATURAL JOIN czymy tabele uywajc wszystkich kolumn o takiej samej nazwie.
Ponisze zapytania bd rwnowane, jeeli jedyn kolumn o wsplnej nazwie w tabelach pracownicy oraz dzial bdzie id_dzialu:
SELECT p.imie, d.nazwa_dzialu FROM pracownicy p JOIN dzial d ON p.id_dzialu = d.id_dzialu
SELECT p.imie, d.nazwa_dzialu FROM pracownicy p NATURAL JOIN dzial d
11
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Wyraenie TOP: Select top 5 * from pracownicy
Nie ma wyraenia TOP Istnieje pseudokolumna ROWNUM oznaczajca numer wiersza zapytania, np. Select * from pracownicy where rownum
-
Rnice pomidzy bazami SQL Server i Oracle
SQL Server Oracle
Domylnie nie rozpoznaje rnic duych i maych liter podczas porwnywania danych tekstowych (case insensitive). Ponisze zapytania s rwnowane: SELECT * FROM pracownicy p WHERE p.imie= Adam SELECT * FROM pracownicy p WHERE p.imie= ADAM
Zawsze rozpoznaje rnice duych i maych liter. Aby wykona wyszukiwanie ignorujce rnie maych i duych liter naley wykona: SELECT * FROM pracownicy p WHERE UPPER(p.imie) = ADAM
13
-
Podstawowe typy danych
Tekstowy (VARCHAR2)
Numeryczny (NUMBER)
Data (DATE)
14
-
Operatory porwna
Ponisze operatory zwracaj warto okrelon TRUE lub FALSE, gdy oba argumenty nie s wartociami NULL
Gdy jeden z argumentw jest NULL, operator zwrci warto nieokrelony
Warunek Operator Przykad
rwno = a=b
wiksze od mniejsze od
> <
a>b a= =b a
-
Tekstowe funkcje PL/SQL
CONCAT (tekst1, tekst2)
Suy do czenia dwch wartoci tekstowych w jeden.
konkatenacja za pomoc ||
Suy do czenia wartoci tekstowych w jeden.
CONCAT(labo, ratorium) zwrci laboratorium
Ala || ma || kota zwrci Ala ma kota
16
-
Tekstowe funkcje PL/SQL
UPPER (tekst)
Zamienia wszystkie litery parametru tekstowego na due
LOWER (tekst)
Zamienia wszystkie litery parametru tekstowego na mae
UPPER(DoktRYna) zwrci DOKTRYNA
LOWER(InfoRMATYKA) zwrci informatyka
17
-
Tekstowe funkcje PL/SQL
INITCAP (tekst)
Zamienia wszystkie pierwsze litery kadego sowa na due
Zamienia pozostae litery parametru tekstowego na mae
INITCAP(konferenCJA pRASOWA) zwrci Konferencja Prasowa
18
-
Tekstowe funkcje PL/SQL
LTRIM(tekst[, znaki_do_usunicia])
Usuwa wszystkie wyspecyfikowane znaki z lewej strony parametru tekstowego
np.
LTRIM (babcABC TESTa','abc) zwrci: 'ABC TESTa'
Domylnymi znakami do usunicia s spacje:
LTRIM ( TEST ') zwrci: TEST
19
-
Tekstowe funkcje PL/SQL
RTRIM(tekst[, znaki_do_usunicia])
Usuwa wszystkie wyspecyfikowane znaki z prawej strony parametru tekstowego
np.
RTRIM (abc TESTcaba','abc) zwrci: abc TEST'
Domylnymi znakami do usunicia s spacje:
RTRIM ( TEST ) zwrci: TEST
20
-
Tekstowe funkcje PL/SQL
TRIM([[LEADING|TRAILING|BOTH] [znak] FROM ] tekst)
Usuwa wyspecyfikowany znaki z lewej, z prawej lub z obu stron parametru tekstowego
np.
TRIM(BOTH a FROM 'abcaa) zwrci: bc'
Domylnym znakiem do usunicia jest pojedyncza spacja:
TRIM( TEST ) zwrci: TEST
21
-
Tekstowe funkcje PL/SQL
LENGTH (tekst)
Zwraca dugo parametru tekstowego (ilo znakw)
LENGTH(abcde) zwrci 5
22
-
Tekstowe funkcje PL/SQL
INSTR(tekst, fragment [, odkd_przeglda[, ktre_wystpienie]]) Wyszukuje zadany fragment w tekcie i zwraca
jego pozycj
Parametr tekst jest wartoci tekstow do przeszukania
Parametr fragment jest poszukiwan wartoci tekstow
INSTR(Litwo, ojczyzno,czy)
INSTR(Litwo, ojczyzno,o)
23
-
Tekstowe funkcje PL/SQL
INSTR(tekst, fragment [, odkd_przeglda[, ktre_wystpienie]]) Parametr odkd_przeglda jest wskazuje miejsce, od
ktrego funkcja zacznie przeglda tekst w poszukiwaniu zadanego fragmentu. Parametr ten jest parametrem opcjonalnym, gdy ominity domyln wartoci jest 1.
Gdy Parametr odkd_przeglda jest ujemny, miejsce, od ktrego funkcja zacznie przeglda tekst wyznaczane jest od koca, a tekst szukany jest do pocztku.
INSTR(Litwo, ojczyzno,o,6) INSTR(Litwo, ojczyzno,o,-5)
24
-
Tekstowe funkcje PL/SQL
INSTR(tekst, fragment [, odkd_przeglda[, ktre_wystpienie]])
Parametr ktre_wystpienie wskazuje numer wystpienia fragmentu w tekcie. Parametr ten jest parametrem opcjonalnym, gdy ominity domyln wartoci jest 1.
INSTR(Litwo, ojczyzno,o,1,3)
INSTR(Litwo, ojczyzno,o,-1,2)
25
-
Tekstowe funkcje PL/SQL
SUBSTR(tekst, odkd_wyci[, ilo_znakw]) zwraca fragment tekstu parametr tekst jest rdow wartoci tekstow parametr odkd_wyci wskazuje pocztkow pozycj np. SUBSTR(abcdefgh,3,4) zwrci cdef Parametr ilo_znakw jest parametrem opcjonalnym,
gdy ominity - funkcja zwraca cay tekst do koca np. SUBSTR(abcdefgh,3) zwrci cdefgh gdy parametr odkd_wyci jest ujemny, pozycja ta
jest liczona od koca np. SUBSTR(abcdefgh,-5,2) zwrci de
26
-
Tekstowe funkcje PL/SQL
LPAD(tekst, dugo[, tekst2])
Zwraca parametr tekst lewostronnie, uzupeniony do dugoci zadanej w parametrze dugo, cigami znakw parametru tekst2
lpad('ABC',10,'123') zwraca 1231231ABC
Domylnym parametrem tekst2 jest spacja
lpad(test',10) zwraca test
27
-
Tekstowe funkcje PL/SQL
RPAD(tekst, dugo[, tekst2])
Zwraca parametr tekst lewostronie uzupeniony do dugoci dugo cigami znakw parametru tekst2
rpad('ABC',10,'123') zwraca ABC1231231
Domylnym parametrem tekst2 jest spacja
lpad(test',10) zwraca test
28
-
Funkcje konwertujce
TO_CHAR(liczba[, format[, ustawienie_NLS]])
Konwertuje liczb na tekst zgodnie z zadanym formatem
Liczba Format Wynik
-12345 99999999 -12345
0 99.99 .00
12.134 999.99 12,134
29
-
Funkcje konwertujce
TO_NUMBER(tekst[,format[,ustawienie_NLS]])
Tekst Format Wynik
12345- 99999999MI -12345
0 99.99 0
12.134 999.9999 12.134
30
-
Funkcje konwertujce
Formaty liczb
Format Przykad Znaczenie
9 9999 Oznacza cyfr
0 9900 Oznacza cyfr lub zero. Przykad zawsze zwrci co najmniej 2
cyfry
. 999.99 Oznacza znak . dziesitny
, 999,999,999.99 Oznacza znak , grupujcy
D 999D99 Oznacza znak dziesitny zgodny z ustawieniami sesji
G 999G999G999D99 Oznacza znak grupujcy zgodny z ustawieniami sesji
31
-
Funkcje konwertujce
Formaty liczb
Format Przykad Znaczenie
S 99900D00S Znak liczby + lub -
MI 99900D00MI Minus w przypadku liczby ujemnej, spacja w przypadku
liczby dodatniej
L, C 99900L Oznacza kod waluty
FM FM99900D00 Usuwa spacje z pocztku przekonwertowanego cigu
RN RN Liczba pisana cyframi rzymskimi
32
-
Funkcje konwertujce
TO_CHAR(data[, format[, ustawienie_NLS]])
Konwertuje parametr daty na tekst zgodnie z formatem
Przykad Wynik
TO_CHAR(SYSDATE,YYYY) 2012
TO_CHAR(SYSDATE,MM) 03
TO_CHAR(SYSDATE,YYYY-MM) 2012-03
TO_CHAR(SYSDATE,'YYYY !@#$%^&*()-=_+ MM') 2012 !@#$%^&*()-=_+ 03
33
-
Funkcje konwertujce
TO_DATE(tekst[, format[, ustawienie_NLS]])
Konwertuje parametr tekstowy zgodny z formatem na dat
Przykad Wynik
TO_DATE(2012-03-07,YYYY-MM-DD) 01-03-2012 00:00:00
34
-
Funkcje konwertujce
Formaty dat
Format Znaczenie Przykad
YYYY Rok 4-cyfrowy 2012
YYY, YY, Y 3, 2 lub1 najmniej znaczca cyfra roku 012, 12, 2
Q Kwarta (1-4) 1
MM Numer miesica (01-12; Stycze = 01). 03
MON Skrcona nazwa miesica MAR
MONTH Duga nazwa miesica MARZEC
Month Duga nazwa miesica Marzec
RM Miesic rzymski (Stycze = I) III 35
-
Funkcje konwertujce
Formaty dat
Format Znaczenie Przykad
WW Tydzie roku 16
W Tydzie miesica 1
D Dzie tygodnia 1-7 (niedziela= 1) 7
DAY Nazwa dnia SOBOTA
DD Dzie miesica 01-31 03
DDD Dzie roku (001-366). 071
DY Skrcona nazwa dnia SO
36
-
Funkcje konwertujce
Formaty dat
Format Znaczenie Przykad
HH Godzina 01-12 04
HH12 Godzina 01-12 04
HH24 Godzina 00-23 16
MI Minuta(00-59) 25
SS Sekunda (00-59). 43
SSSSS Sekunda dnia liczona od pnocy (0-86399). 59126
37
-
Funkcje konwertujce
TO_CHAR(data[, format[, ustawienie_NLS]])
Parametr ustawienie_NLS jest parametrem niewymagalnym, zawiera informacj o ustawieniach jzykowych, z ktrymi funkcja ma by wykonana
to_char(sysdate, 'MONTH', NLS_DATE_LANGUAGE=''Polish''')
-> zwrci LUTY
to_char(sysdate, 'MONTH)
to_char(sysdate, 'MONTH', NLS_DATE_LANGUAGE=''English''')
-> zwrc FEBRUARY
38
-
Funkcje dodatkowe
USER
Funkcja bezparametrowa zwracajca nazw uytkownika bazodanowego biecej sesji
SELECT USER FROM DUAL;
39
-
Funkcje dodatkowe
NVL(parametr1, parametr2) Zwraca warto parametru1, lub w przypadku
gdy jest on NULL, zastpuje go parametrem2
np. NVL(ls_adres_zamieszkania,ls_adres_zameldowania)
parametr1 Wynik
Nie NULL parametr1
NULL parametr2
40
-
Funkcje dodatkowe
COALESCE(parametr1, parametr2[, parametr3...])
Zwraca warto pierwszego parametru, ktry nie jest NULL
np. COALESCE(ls_nr_komorkowy, ls_nr_stacjonarny, ls_nr_sluzbowy, ls_nr_do_zony)
41
-
Funkcje dodatkowe
NVL2(parametr1, warto_gdy_nie_null, warto_gdy_null)
Zwraca warto_gdy_nie_null lub warto_gdy_null w zalenoci od parametru parametr1
NVL2(ld_data_konca,Zakonczono,Trwa)
parametr1 Wynik
Nie NULL warto_gdy_nie_null
NULL warto_gdy_null
42
-
Funkcje dodatkowe
NULLIF(parametr1,parametr2)
Zwraca NULL, gdy parametry s rwne. W przeciwnym wypadku zwraca parametr1.
NULLIF(ls_drugie_imie,brak)
43
-
Funkcje dodatkowe
DECODE(parametr0, szukana1, warto1,
[, szukana2, warto2][, warto_domylna])
parametr0 jest wartoci porwnywan
szukana1 jest wartoci, do ktrej nastpuje porwnanie
warto1 jest wartoci zwracan, gdy parametr0=szukana1
Warto_domylna jest niewymagaln wartoci zwracan, gdy parametr0 nie jest adn z szukanych
DECODE(ls_plec,M,Mezczyzna,K,Kobieta,Nieznana);
44
-
Funkcje dodatkowe
Funkcje dodatkowe NVL, NVL2, DECODE, COALESCE, NULLIF s przecione i zwracaj:
dat, gdy parametrami s daty
liczb, gdy parametrami s liczby
tekst, gdy parametrami s zmienne tekstowe
45
-
Funkcje matematyczne
ABS(x)
Zwraca warto bezwzgldn parametru x:
ABS(-1.4) zwraca 1.4
46
-
Funkcje matematyczne
SIGN(x)
Zwraca warto wskazujc znak parametru x
Warunek Wynik
x0 1
47
-
Funkcje matematyczne
CEIL(x)
Zwraca najmniejsz cakowit warto wiksz od x
CEIL(2.4) zwraca 3
CEIL(-1.6) zwraca -1
FLOOR(x)
Zwraca najwiksz cakowit warto mniejsz od x
FLOOR(2.4) zwraca 2
FLOOR(-1.6) zwraca -2
48
-
Funkcje matematyczne
ROUND(x[,ilo_miejsc_dziesitnych]) Zaokrgla liczb x do danej ilo miejsc
dziesitnych ROUND(126.1251, 2) zwraca 126.13 ROUND(126.1251, -1) zwraca 130 Domyln wartoci parametru
ilo_miejsc_dziesitnych jest 0 ROUND(2.4) zwraca 2 ROUND(-1.6) zwraca -2
49
-
Funkcje matematyczne
TRUNC(x[,ilo_miejsc_dziesitnych]) Obcina liczb x do danej iloci miejsc dziesitnych
(obcina kocwk) TRUNC(126.1251, 2) zwraca 125.12 TRUNC(-126.1251, -1) zwraca -120 Domyln wartoci parametru
ilo_miejsc_dziesitnych jest 0, co oznacza usunicie czci uamkowej
TRUNC(2.4) zwraca 2 TRUNC(-1.6) zwraca -1
50
-
Funkcje matematyczne
GREATEST(x1, x2[, x3 ])
Zwraca najwiksz spord liczb
GREATEST(11,12,13,10) zwraca 13
LEAST(x1, x2[, x3 ])
Zwraca najmniejsz spord liczb
LEAST(8,4,5,6) zwraca 4
51
-
Funkcje matematyczne
MOD(n,m)
Zwraca reszt z dzielenia liczb n i m
IF MOD(ln_wiek,10) = 0 THEN DBMS_OUTPUT.PUT_LINE(Okragla rocznica!); END IF;
52
-
Funkcje matematyczne
SQRT(n), POWER(n,m)
SIN(x), COS(x), TAN(x)
ASIN(x), ACOS(x), ATAN(x)
SINH(x), COSH(x), TANH(x)
LN(x), EXP(x)
53
-
Funkcje daty
SYSDATE
Funkcja bezparametrowa
Zwraca biec dat
BEGIN dbms_output.put_line(Dzisiejsza data: || TO_CHAR(SYSDATE)); END;
54
-
Funkcje daty
ADD_MONTHS(data, ilo_miesicy)
Zwraca dat pniejsz o ilo_miesicy
Przykad Wynik
add_months(DATE 2012-01-01', 3) 2012-04-01
add_months(DATE '2012-01-01', -2) 2011-11-01
add_months(DATE '2012-01-31', 1) 2012-02-29
add_months(DATE '2012-02-28', 1) 2012-03-28
add_months(DATE '2012-02-29', 1) 2012-03-31
55
-
Funkcje daty
MONTHS_BETWEEN
Zwraca ilo miesicy pomidzy datami
MONTHS_BETWEEN(DATE '2012-01-15',DATE '2011-02-15')
MONTHS_BETWEEN(DATE '2012-02-01',DATE '2012-01-15')
56
-
Funkcje daty
LAST_DAY(data)
Zwraca ostatni dzie miesica
Przykad Wynik
LAST_DAY(DATE 2012-01-01') 2012-01-31
LAST_DAY(DATE '2012-02-15') 2012-02-29
57
-
Funkcje daty
ROUND(data[, stopie])
Zaokrgla dat do odpowiedniego stopnia zaokrglenia
Przykad Wynik
ROUND(DATE 2012-02-12', MM) 2012-02-01
ROUND(DATE '2012-02-21', MM) 2011-03-01
ROUND(DATE '2012-02-31',YYYY) 2012-01-01
ROUND(TO_DATE(2012-01-12 15:14:13, YYYY-MM-DD HH24:MI:SS))
2012-01-13
58
-
Funkcje daty
TRUNC(data[, stopie])
Obcina dat do odpowiedniego stopnia zaokrglenia
Przykad Wynik
TRUNC(DATE 2012-02-12', MM) 2012-02-01
TRUNC(DATE '2012-02-21', MM) 2011-02-01
TRUNC(DATE '2012-02-31',YYYY) 2012-01-01
TRUNC(TO_DATE(2012-01-12 15:14:13, YYYY-MM-DD HH24:MI:SS))
2012-01-12
59
-
Funkcje daty
Stopie zaokrglenia/obcicia Parametr stopie
Rok YYYY, YY
Kwarta Q
Miesic MONTH, MM
Dzie DD
Pierwszy dzie tygodnia DAY, DY, D
Godzina HH, HH12, HH24
Minuta MI
Moliwe stopnie zaokrglenia i obcicia dat:
60