wyk_ad_1

60
PL/SQL Część 1 – Oracle SQL Piotr Medoń

Upload: beata-szwichtenberg

Post on 27-Sep-2015

214 views

Category:

Documents


2 download

DESCRIPTION

PL/SQL

TRANSCRIPT

  • 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