background image

Robert Chwastek

Bazy danych

background image

   Bazy danych

 

     Robert Chwastek

2

                     

    !"    # $    %  &"' 
w Krakowie.

(            #      

)      *

Copyright (c) Robert Chwastek, Kraków 1996.

background image

   Bazy danych

 

     Robert Chwastek

3

+ #,

1.

    E ............................................................................................................................................5

1.1.

D

EFINICJA BAZY DANYCH

............................................................................................................................................... 5

1.2.

S

         

........................................................................................................................... 6

1.3.

T

RANSAKCJE

.................................................................................................................................................................. 6

1.4.

J

        

........................................................................................................................ 7

2.

TYPY DANYCH ............................................................................................................................................................... 8

2.1.

S

PIS TYPÓW DANYCH

...................................................................................................................................................... 8

2.2.

T

YP NUMERYCZNY

......................................................................................................................................................... 8

2.3.

K

ONWERSJE TYPÓW

..................................................................................................................................................... 10

2.4.

W

   

......................................................................................................................................................... 10

3.

MODEL RELACYJNY .................................................................................................................................................. 12

3.1.

S

TRUKTURY DANYCH W MODELU RELACYJNYM

........................................................................................................... 12

3.2.

R

 

SQL ................................................................................................................................................ 13

3.3.

S

   

SQL ......................................................................................................................................... 14

3.3.1. Definicje podstawowe ............................................................................................................................................ 14
3.3.2. Rozkaz CREATE TABLE........................................................................................................................................ 15
3.3.3. Rozkaz DROP ........................................................................................................................................................ 16
3.3.4. Rozkaz INSERT ...................................................................................................................................................... 17
3.3.5. Rozkaz DELETE .................................................................................................................................................... 18
3.3.6. Rozkaz CREATE SEQUENCE ............................................................................................................................... 19
3.3.7. Rozkaz SELECT ..................................................................................................................................................... 21
3.3.8. Rozkaz UPDATE.................................................................................................................................................... 22
3.3.9. Rozkaz RENAME ................................................................................................................................................... 23
3.3.10.

Rozkaz ALTER TABLE ..................................................................................................................................... 24

3.3.11.

Rozkaz CREATE INDEX .................................................................................................................................. 25

3.3.12.

Rozkaz CREATE VIEW .................................................................................................................................... 27

3.3.13.

Rozkaz COMMIT.............................................................................................................................................. 28

3.3.14.

Rozkaz ROLLBACK.......................................................................................................................................... 28

3.3.15.

Rozkaz SAVEPOINT......................................................................................................................................... 28

3.3.16.

Rozkaz SET TRANSACTION ............................................................................................................................ 29

3.4.

O

PERACJE RELACYJNE

.................................................................................................................................................. 30

3.4.1. Selekcja .................................................................................................................................................................. 30
3.4.2. Projekcja................................................................................................................................................................ 31
3.4.3. Produkt .................................................................................................................................................................. 32
3.4.4.

 ..............................................................................................................................................................32

3.4.5.

   ..........................................................................................................................................33

3.4.6. Grupowanie ........................................................................................................................................................... 34
3.4.7.

         ..................................................................................................................35

3.5.

P

ODZAPYTANIA

............................................................................................................................................................ 35

3.6.

W

IDOKI 

(

PERSPEKTYWY

).............................................................................................................................................. 37

3.7.

T

RANSAKCJE

................................................................................................................................................................ 38

3.8.

N

ORMALIZACJA RELACJI

.............................................................................................................................................. 38

3.8.1. Cele normalizacji ................................................................................................................................................... 38
3.8.2. Pierwsz

       .....................................................................................................................................39

3.8.3. Definicje pomocnicze ............................................................................................................................................. 40
3.8.4.

          .........................................................................................................................................44

3.8.5.

          .......................................................................................................................................46

3.8.6. Czwarta pos

     ......................................................................................................................................47

3.8.7.

         ...........................................................................................................................................48

3.8.8. Podsumowanie ....................................................................................................................................................... 48

4.

     IA..........................................................................................................................................50

4.1.

O

PERATORY

................................................................................................................................................................. 50

4.1.1. Operatory arytmetyczne......................................................................................................................................... 50
4.1.2. Operatory znakowe ................................................................................................................................................ 50
4.1.3. Operatory porównania .......................................................................................................................................... 51
4.1.4. Operatory logiczne ................................................................................................................................................ 52
4.1.5.

  !   ........................................................................................................................................53

background image

   Bazy danych

 

     Robert Chwastek

4

4.2.

W

  

................................................................................................................................................................. 53

4.3.

W

ARUNKI

..................................................................................................................................................................... 55

5.

STANDARDOWE FUNKC

   ............................................................................................................. 57

5.1.

F

UNKCJE NUMERYCZNE

............................................................................................................................................... 57

5.2.

F

UNKCJE ZNAKOWE

...................................................................................................................................................... 57

5.3.

F

UNKCJE GRUPOWE

...................................................................................................................................................... 59

5.4.

F

UNKCJE KONWERSJI

.................................................................................................................................................... 60

5.5.

F

UNKCJE OPERACJI NA DATACH

................................................................................................................................... 61

5.6.

I

NNE FUNKCJE

.............................................................................................................................................................. 63

5.7.

F

ORMATY ZAPISU DANYCH

........................................................................................................................................... 64

5.7.1. Formaty numeryczne ............................................................................................................................................. 64
5.7.2. Formaty dat ........................................................................................................................................................... 64

6.

PROGRAMOWANIE PROCEDURALNE - PL/SQL................................................................................................. 66

6.1.

W

PROWADZENIE

.......................................................................................................................................................... 66

6.2.

S

TRUKTURA BLOKU

...................................................................................................................................................... 67

6.3.

P

ROCEDURY I FUNKCJE

................................................................................................................................................ 67

6.4.

K

URSORY

..................................................................................................................................................................... 68

6.5.

R

EKORDY

..................................................................................................................................................................... 70

6.6.

O

  

....................................................................................................................................................... 71

6.6.1. Informacje podstawowe ......................................................................................................................................... 71
6.6.2.

"!   #$    ......................................................................................................................................... 73

6.6.3.

%  !&.................................................................................................................................................. 73

6.6.4.

"!  #$      '!  ............................................................................................................... 74

6.7.

R

 

PL/SQL .......................................................................................................................................... 75

6.7.1. Rozkaz OPEN ........................................................................................................................................................ 75
6.7.2. Rozkaz CLOSE....................................................................................................................................................... 76
6.7.3. Rozkaz FETCH ...................................................................................................................................................... 76
6.7.4. Rozkaz SELECT ... INTO....................................................................................................................................... 77
6.7.5. Rozkaz IF ............................................................................................................................................................... 77
6.7.6. Rozkaz LOOP ........................................................................................................................................................ 78
6.7.7. Rozkaz EXIT .......................................................................................................................................................... 80
6.7.8. Rozkaz GOTO ........................................................................................................................................................ 80

7.

LITERATURA................................................................................................................................................................ 81

background image

   Bazy danych

 

     Robert Chwastek

5

1. 

    

1.1.  Definicja bazy danych

W pewnym uproszczeniu przez 

         -

danych, a przez system bazy danych

 "  -              

)          *                # 

  *  .    -      )   /  )  -    

 -       -       # 0 

    # -    #  1*

2    # ) -/ rozumiany jako:



 

  #/  "           



 

  #/       "      #     - 3     -4

      # ) -/          

     - 3    *

.  0      1    -    )  

 #             * (      
jest opis semantyki (znaczenia) danych, przechowywanych w bazie. System bazy danych

)             #  0  1*  (      -    

  #/          modelu danych. Przez model danych rozumiemy

-   -    /  )         #     #   

#  *  5-  /  )         #           # 
rzeczywistego, istotnych z punktu widzenia danego zastosowania tworzy schemat bazy
danych
. Baza danych jest modelem logicznie spójnym

)  #  celowi. W

     -     ) 0   1 /      

       #*

5  -            ##    #     )    *

+  )       -          

    -        aplikacjami*            

      * & -       -     -/

*              -      )   #       
tym celu aplikacje.

6)   / ) ) -      ,



 

3  



 

)   



 

         #

         *  -   *     0  #1

   -  *    )      - )  *
Schemat jest opisem struktury (formatu) przechowywanych danych oraz wzajemnych

  7  *

background image

   Bazy danych

 

     Robert Chwastek

6

1.2. 

   

    danych (SZBD) jest to zestaw programów

)          -   * +     -   
jest oprogramowaniem ogólnego przeznaczenia. System bazy danych

     - 

          -                     

        )    *

1.3. Transakcje

$               -       

       #/  0#/          #1*  $    

        *         -      )     /    

                    -  ) *  (    #   

   -                   
przypadku niepowodzenia którejkolwiek z nich wycofuje instrukcje uprzednio wykonane.

.       #        -       

    ,

  

    

      



   

  

 

 









 

background image

   Bazy danych

 

     Robert Chwastek

7

1.4. 

     

8                       -      )

 /    ) ,



 

        0     9    "  91     )  
definiowanie struktury danych przechowywanych w bazie, czyli tworzenie schematu
implementacyjnego



 

       0 6   9   " 691  )  

           -   *



 

      0 :  9   " :91  )     
transakcjami (np. zatwierdzanie lub wycofywanie)



 

    7  0;  9  1     )    -     -    
zgodnych z podanymi warunkami

background image

   Bazy danych

 

     Robert Chwastek

8

2. Typy 

danych

2.1.  Spis typów danych

Typ

Opis

char(size)

:     #    )    *  

            )   /  <==*  (      

    #      #/ >

character

Synonim do char

varchar(size)

W aktualnej wersji ORACLE’a jest to synonim do char, konieczne jest

      *  (              )   

-       #    ?    *

date

Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e.

#      @ "6A"BB *, CD>"8%"EFG

long

:         #        )  H==!=    *

6)  /          - *

long varchar

synonim do long

raw(size)

: -      #* +      *

I          <==* (  #     

             *

long raw

: -     #* .   #      *

(  #                              
szesnastkowej.

rowid

J   #/    * .     

*      ) -/   -     
przechowywana, ale obliczana na podstawie informacji o fizycznym

)         * (  #/    ) -/

                    
ROWIDTOCHAR.

number

$ * 8  #    /    >*D K
10

-129

 do 9.99 * 10

124

*  6)             

       -   )*

2.2. Typ 

numeryczny

$      )          -          

   *              )     /      
trzech sposobów:


 

number



 

number (precyzja)



 

number (precyzja, skala)

background image

   Bazy danych

 

     Robert Chwastek

9

.  #       -     )   /  >  !E* +

 #  -            )   /   
-84 do 127.

W momencie definiowania kolumny numerycznej dobrym zwyczajem jest

                 )                

    #           # -   *

8#     #/                    -*  8#     #/

           * 8#        #/     

      -                  4  *     0>D  "<1

            *  :          )         )

*  A         )        -    /        

   -        )         4  ,  -0L  =1  -

        *

9-  )   )    /         *  +    

             -#                M  

      - >D    - )/    *       
9.87E-2 oznacza 9.87 * 10

-2

.

N     -             )          

AI%:9MG        -* 6)           *

      -       -   - ,

background image

   Bazy danych

 

     Robert Chwastek

10

Specyfikacja

Typ

Precyzja

Skala

number

number

38

null

number(*)

number

38

null

number(*, s)

number

38

s

number(p)

number

p

0

number(p,s)

number

p

s

decimal

number

38

0

decimal(*)

number

38

0

decimal(*, s)

number

38

s

decimal(p)

number

p

0

decimal(p, s)

number

p

s

integer

number

38

0

smallint

number

38

0

float

number

38

null

float(*)

number

38

null

float(b)

number

b

null

real

number

63 binary (18 decimal)

null

double precision

number

38

null

2.3. Konwersje 

typów

(      -    )         

    *      /     -   -

)   *      /      -        /

    *  .)   -        )           

       AI%:9M,

Z typu

Do typu

char

number

date

char

-

TO_NUMBER

TO_DATE

number

TO_CHAR

-

TO_DATE

date

TO_CHAR

) 

-

2.4. 

   

.   -      /    #           )        

 -    -   * (  #/  0J991      #

D    -      )      J99  

  )  #/   0J991*

2   O9        /        #      0     1   -

 #     # # *      O9      ,

background image

   Bazy danych

 

     Robert Chwastek

11

O90:A66 D1    #/ :A66       #/   - D #  :A66

  #/ J99*

( #/           #/  J99*  *       

    -  #       #, >DDD J99 J99

J99  <DDD   >=DD  ) 0>DDD P <DDD1Q< R >=DD*

8        ) )/   #    N+ J99  N+

A$  J99*  8#      )                     #

      # * . ) J99   -  #  

)  -/            #  )  J99*

AI%:9M              * $ 

  :A66  R  J99                    +M9M:$     

          )     *  8           AI%:9M  

      -*

background image

   Bazy danych

 

     Robert Chwastek

12

3. Model 

relacyjny

5                 -                

podstawowych elementów:


 

relacyjnych struktur danych



 

        )               
bazy danych



 

   #   -    #   #  

3.1.  Struktury danych w modelu relacyjnym

.                -  -   nu

  7       -   -          #*  (
bazach danych relacja przedstawiana jest w postaci tabeli. Relacja jest zbiorem krotek

           )  #* S )     

    - *  S )                -     

   - * S )   0 -  1       #,



 

  0 1   



 

-  0  1   



 

 #/   0 1    



 

 #/ -  0  1    



 

 # -  0 1   

.    -            ,

!  "

#

$ %

&  

'()*)+)*,-'

. 

/"

&

01)-2))(,-'

 

3  

4

++2)2()()*+





!

'))2)2)2(*2

!

 5

&

112(2()2((*

 





/ "

6 %  

!"

&78

           -            #

  -           * (    )

background image

   Bazy danych

 

     Robert Chwastek

13

                           -   

     #        )   *   

      -                       #   

-    *  (     #          -  -        
jedna jak i druga terminologia.

$ - )   /,



 

zbiór encji wraz z atrybutami



 

-   7        - 



 

-     -           0    - 1

S )  -          -    

   *  (   -          /            "
zabezpieczenie przed tym powtórzeniem jest realizowane poprzez pola kluczowe. Wiersze

)       "    -        

     * (     -        - 

   "   )   )                #/    

  #*

(           -     -       )    /    

      ,



 

J)                    - *  S        /

            /       -   0)    

 #/1*



 

3              -     -        
tabeli.



 

$                    -              -

   " -     #      )*



 

J        ) - *



 

Unikaj powtarzania informacji w bazie danych (normalizacja).

3.2. 



QL

.) -          +;9     

* A    -  #      #   *

Rozkaz

Typ

Opis

ALTER TABLE

DDL

          -         

    -    -     #/  

      

CREATE INDEX

DDL

Tworzy indeks dla tabeli

CREATE
SEQUENCE

DDL

$   -  )            -  "

 *  +   )  )/     
unikalnych identyfikatorów w tabelach

CREATE TABLE

DDL

$    -                  
przestrzeni dla danych

background image

   Bazy danych

 

     Robert Chwastek

14

CREATE VIEW

DDL

          -       #   -   -
innych widoków

DELETE

DML

J   - )   - 

DROP obiekt

DDL

J     -   -  -

INSERT

DML

Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku

RENAME

DDL

5    -    -  - 

SELECT

DML

Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej
lub kilku tabel

UPDATE

DML

Zmienia dane w tabeli

COMMIT

DML

S7           

ROLLBACK

DML

(          -   
punktu.

SAVEPOINT

DML

Zaznacza punkt, do którego mozliwe jest wykonanie
rozkazu ROLLBACK

SET
TRANSACTION

DDL

5                 "   0     
odczytu).

3.3. 

   !

3.3.1.

 

Definicje podstawowe



 

N   0  1 "          #       

 -    #  * I)   -    )       

        0*  CTG  - CUG1* +      

                3  -         ##
napisanych w ten sposób aplikacji.



 

+     "      )       

   +;9*  +                  +;9     
ORACLE’a przedstawia tabela:

access

add

all

alter

and

any

as

asc

audit

between

by

char

check

cluster

column

comment

compress

connect

create

current

date

dba

decimal

default

delete

desc

distinct

drop

else

exclusive

exists

file

float

for

from

grant

graphic

group

having

identified

if

immediate

in

increment

index

install

initial

insert

integer

intersect

into

is

level

like

lock

long

maxextents

minus

mode

modify

noaudit

nocompress

not

nowait

null

number

of

offline

on

online

option

or

order

pctfree

prior

privileges

public

raw

background image

   Bazy danych

 

     Robert Chwastek

15

rename

resource

revoke

row

rowid

rownum

rows

select

session

set

share

size

smallint

start

successful

synonym

sysdate

table

then

to

trigger

uid

union

unique

update

user

validate

values

varchar

vargraphic

view

whenever

where

with



 

9-  "    -/         -    *  9-             

 *  (     AI%:9M   -  )    /            -

  *  2                -           -  >D

   ) )/  -     CG  - CMG* .  ,

 

7E2 = 7 * 10

2

 

25e-03 = 25 * 10

-3

 

     AI%:9M  -      )  7/    CSG  -   

C6G*  9   CSG      )      -    -/  )    >D<L  0>  S1

     C6G ) -  ) )/  >DLE=VH 0> 61* .  ,

 

256K = 256 * 1024

 

1M = 1 * 1048576


 

I   +;9 7  # 

3.3.2.

 

Rozkaz CREATE TABLE

I   :IM%$M  $%9M  )            -   0-   1  

      )   ,



 

 #  -          



 

 #    - 



 

  -    #   



 

      -          - 

I  :IM%$M $%9M        ,

CREATE TABLE [user.]table

(  {column_element | table_constraint}
[, {column_element | table_constraint} ] ... )
[ PCTFREE n ] [ PCTUSED n ]
[ INITTRANS n ] [ MAXTRANS n ]
[ TABLESPACE tablespace ]
[ STORAGE storage ]
[ CLUSTER cluster (column [, column] ...) ]
[ AS query ]

Parametry:


 

  "    #   -   #                #        -

   - *  $ -       )     )   /          

     -    0%1

background image

   Bazy danych

 

     Robert Chwastek

16



 

-   "      -      -/        *  (   - 

  )     /     



 

 W   "                    #     

 * $ -    /       0     1



 

- W    "  #       /   -



 

-   "  # -    ) #/ - 



 

   "  #  -    



 

   "  #   0   #   -/  # - 1  

 )  / - 



 

query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie

+M9M:$*  8#               )   /               "     

                   #       *    6)  

   )                                     

-     * 9-       -/
sama jak liczba kolumn w zapytaniu.

.  ,

CREATE TABLE pracownicy(
  nr_pracownika NUMBER NOT NULL PRIMARY KEY,
  imie CHAR(15) NOT NULL CHECK (imie = UPPER(imie)),
  nazwisko CHAR(25) NOT NULL
    CHECK (nazwisko = UPPER(nazwisko)),
  nr_wydzialu NUMBER (3) NOT NULL
);

3.3.3.

 

Rozkaz DROP

I     )        -   )   *  A    /   

      ,

DROP object_type [user.]object

.)       )          )      

poszczególnych typów obiektów:


 

DROP CLUSTER [user.]cluster [INCLUDING TABLES]

 - kasowanie

  * (        N:9JN& $%9M+     

  -          * 8#  

N:9JN& $%9M+               -/

      )   - * 8   - 

           -     -*



 

DROP [PUBLIC] DATABASE LINK link

"    * 8#  

 -     /  )       0%1*



 

DROP INDEX [user.]index

 - kasowanie indeksu.



 

DROP [PUBLIC] ROLLBACK SEGMENT segment

 - kasowanie segmentu

  0  -  1* 6) /            

)    * S       )   /
tylko administrator bazy danych.

background image

   Bazy danych

 

     Robert Chwastek

17



 

DROP SEQUENCE [user.]sequence

 - kasowanie sekwencji.



 

DROP [PUBLIC] SYNONYM [user.]synonym

 - usuwanie synonimu. Synonim

-  )  /          0%1* . 

)     /          # *



 

DROP TABLE [user.]table

"   - * (   - 

                  

 # -      )    * (      

-                *



 

DROP TABLESPACE tablespace [INCLUDING CONTENTS]

 - usuwanie

-   * I   ) -/           0%1* (
przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie

          * 8#   N:9JN& :A$M$+

      -            *



 

DROP VIEW [user.]view

"    * .      

 -                  

      *

3.3.4.

 

Rozkaz INSERT

I                 -    -     -   )  

 *  %-   /        -    )  -/    #    -      

0%1 -   /       - *

+    ,

INSERT INTO [user.]table [ (column [, column] ...) ]
  { VALUES (value [, value] ...) | query }

Parametry:


 

 "    # - 



 

-  "   -       



 

  "        -  -  



 

?   "      #/               #    *

(  #/ ) -/     )* 8#      #/    

J99   -/     #         *



 

X  "         +M9M:$             #/    #       

 #  #   * 5    ) /   AIMI 2AI  2AI
UPDATE.

Opis:

I  N+MI$ )       O%9JM+         *

      #   0 -          1       

     #*  S             #          #

  J99 0        -/        A$ J991*

8#   )       +M9M:$            O%9JM+     )    

     #  0        1* .   

background image

   Bazy danych

 

     Robert Chwastek

18

        -                        

    #   0 -      #      1*

5   )   /   )  -       *

(                #      

            * .   

-/      #/     - *

Y        #        )  *

.  ,

INSERT INTO pracownicy VALUES
  (50, ‘JAN’, ‘KOWALSKI’, 3);

INSERT INTO ksiazki (tytul, autor, miejsce)
  SELECT 'Pan Tadeusz', autor_nr, miejsce_nr
  FROM autorzy, miejsca
  WHERE nazwisko = 'Mickiewicz' AND
        miejsce = 'lewa polka'
;

3.3.5.

 

Rozkaz DELETE

I  M9M$M )      - *

+   ,

DELETE [FROM] [user.]table [alias] [WHERE condition]

Parametry:

 "   )  

-  "   -  -      ) / 

  "        -    )    M9M$M 

      

  "      /    ) /* (   )

  /   -            /     

   * S    -     )     -  -

-     # $IJM - 2%9+M*

Opis:

:    7                        

     -    *

.  ,
Skasowanie wszystkich wierszy w tabeli pracownicy:

DELETE FROM pracownicy ;

+                )             
numerem 2:

DELETE FROM ksiazki WHERE autor = 2 ;

background image

   Bazy danych

 

     Robert Chwastek

19

3.3.6.

 

Rozkaz CREATE SEQUENCE

$   -  0     1             )   

)   /      -      *  +     -/  )      

        -     *             
przynajmniej uprawnienia RESOURCE w conajmniej jednej przestrzeni tabel.

+   ,

CREATE SEQUENCE [user.]sequence
  [INCREMENT BY n]
  [START WITH n]
  [MAXVALUE n | NOMAXVALUE]
  [MINVALUE n | NOMINVALUE]
  [CYCLE | NOCYCLE]
  [CACHE n | NOCACHE]
  [ORDER | NOORDER]

Parametry:


 

 "   )  



 

X  "             -/           -/

  --   )   *



 

N:IM6M$  B  "   #  )            - *  8# 

 -              -      -           

     "   * #      #/ >*

    ) - )  D*



 

+$%I$ (N$' "    -     -/     *

#     #    6NO%9JM            6%ZO%9JM   

     *  J                  

 #/             MZ$O%9*



 

6NO%9JM  "   #         #/     )    /    *

#               >              #/  

  ">D<V  P  >*  .   A6NO%9JM     )       -

  /  #  *



 

6%ZO%9JM "  #       #   )  /   *

(  #   #     ">    >D<V  "  >              

*  (    A6%ZO%9JM     )       -

  /  #    *



 

:B:9M A:B:9M " #   #  A:B:9M    ) ) 

           7  * ( 

     )  -                -*  (

       :B:9M    #      

    #   0   1  -    #

         0     1    
cykl generacji numerów.

background image

   Bazy danych

 

     Robert Chwastek

20



 

:%:'M A:%:'M "    :%:'M     "   

                          - #

        -*  S    A:%:'M        )  #/*  # 

     :%:'M  <D*  (  #/       :%:'M    -/    )
MAXVALUE - MINVALUE.



 

AIMI  AAIMI  "        AIMI       )       -  -

                  *

S   AAIMI    #/* S #/     

   )                )      #/  0  1     

 * 5      )             
do generacji kluczy pierwotnych.

Opis:

+     -/  )                     - 

 -   -    )    * %- /        # 

    )      )  /     +M9M:$        *  + 

)   / *

              )     -        -/

)       -            )   -    )    *  8  

)    )                   )     

   )             *    

)   )   / -   )  )        

  0  )        )   1*

             , MZ$O%9  :JIIO%9*

.    MZ$O%9    )              #     

 * +       ,

sequence.NEXTVAL

 X      *

.   :JIIO%9          #   *

%- )   - ) :JIIO%9   # ) MZ$O%9

       * +          ,

sequence.CURRVAL

 X      *

.   MZ$O%9  :JIIO%9  -/ )  ,



 

  +M9M:$    +M9M:$ 0     1



 

 #  #   N+MI$



 

 ) +M$   J.%$M

.   MZ$O%9  :JIIO%9  ) ) / ,

podzapytaniach

 #     



 

     N+$N:$



 

z klauzulami ORDER BY, GROUP BY i HAVING w rozkazie SELECT



 

z operatorem ustawienia (UNION, INTERSECT, MINUS)

background image

   Bazy danych

 

     Robert Chwastek

21

.  ,

CREATE SEQUENCE eseq INCREMENT BY 10 ;
INSERT INTO pracownicy
  VALUES (eseq.NEXTVAL, ‘Jan’, ‘Kowalski’, 3) ;

3.3.7.

 

Rozkaz SELECT

I  +M9M:$ )  #            -    - *

6) -/ )    -    - 0     1     

 -       * %-  /     #  -  - -/

  #  /   +M9M:$   -   - -/    - 
(DBA).

+   ,

SELECT [ALL | DISTINCT]
       {* | table.* | expr [c_alias] }
       [, { table.* | expr [c_alias] } ] ...
  FROM [user.]table [t_alias]
    [, [user.]table [t_alias]] ...
  [ WHERE condition ]
  [ CONNECT BY condition [START WITH condition] ]
  [ GROUP BY expr [. Expr] ... [HAVING condition] ]
  [ {UNION | INTERSECT | MINUS} SELECT ...]
  [ ORDER BY {expr | position} [ASC | DESC]
          [, {expr | position} [ASC | DESC]] ] ...
  [ FOR UPDATE OF column [, column] ... [NOWAIT] ]

Parametry:


 

%99  "      #       )                 

  +M9M:$    /   *



 

N+$N:$  "   #   )               /     

         *                   #     

 #   )          +M9M:$  -  *



 

K "    )         -    /
pokazane.



 

- *K "    )        -     /   



 

[ "  )       #   



 

W   "         0  1    )     )

               #   *  (  )   -       

        *  %            -/  )       
miejscu zapytania.



 

\*] -   "   #      -          )    /*  8#   )      

      #        )        0     
SELECT).

background image

   Bazy danych

 

     Robert Chwastek

22



 

W    "       # /           -        -      *

 #  )        * (        

 -          /      *



 

   "            /      -        

  * (            #   *



 

   "          -            )     
SELECT, a nie na nazwie.



 

%+:  M+:  "   #   )             -/          #

 -    0 1*



 

  "      )    -     2IA6*



 

A(%N$  "   #   )  AI%:9M      /        )   

     /    )  #/   -               

 -      )   *

Opis:

J)       -                   )        

-    #     -        

         ,



 

#    -                    -/

)   +M9M:$



 

AI%:9M      - 7 #           - 

 /*

.          +M9M:$       #

  *

.  ,

SELECT imie, nazwisko FROM pracownicy ;

SELECT tytul, autorzy.imie, autorzy.nazwisko,
       miejsca.miejsce
  FROM ksiazki, autorzy, miejsca
  WHERE ksiazki.autor = autorzy.autor_nr AND
        ksiazki.miejsce = miejsca.miejsce_nr
;

3.3.8.

 

Rozkaz UPDATE

I   J.%$M  )                 - *  (  

            -    #    -        0%1   -

    7 J.%$M   - *

+   ,

UPDATE [user.]table [alias]
  SET column = expr [, column = expr] ...
  [ WHERE condition ]

background image

   Bazy danych

 

     Robert Chwastek

23

lub

UPDATE [user.]table [alias]
  SET (column [, column] ...) = (query)
    [, column [, column] ...) = (query) ] ...
  [ WHERE condition ]

Parametry:


 

 "    # - *



 

-  "     - *



 

   "        )           -            
rozkazu.



 

  "      - *       - #      

     *



 

[ "  ) "       #   



 

X "   +M9M:$ -     AIMI B  2AI J.%$M      

   - *



 

   "       *  (        /    #/  $IJM   -  2%9+M*

(   -     #   

Opis:

S    +M$   #                         #

   -/        *  S    ('MIM   #            /

   ) /  #   #  * 8#  

('MIM             - *

I   J.%$M     )                     ('MIM

-   #  )7           CRG   

 #    #            *

8#      +M$                 /      

  )    * S )  #/     

 #   #  * 8#     0        +M$ ?  R

X1              J99*

5   )   /     - * 8  -    

 )          J.%$M*

.  ,

UPDATE pracownicy

 

 

;

3.3.9.

 

Rozkaz RENAME

I   IM%6M         -        -  *  5   )

  /  # -    - *

background image

   Bazy danych

 

     Robert Chwastek

24

+   ,

RENAME old TO new

Parametry:
old - aktualna nazwa tabeli, widoku lub synonimu

 " )    -    - 

Opis:

(          -         -

       *  5            )   /       *  5 

        )  -/               ,    :IM%$M  $%9M

IA. $%9M  IM%6M    -,

CREATE TABLE temporary (new_column_name)
  AS SELECT old_column_name FROM table ;
DROP TABLE table ;
RENAME temporary TO table ;

.  ,

RENAME wydzialy TO jednostki ;

3.3.10.

 

Rozkaz ALTER TABLE

I  )    - * (      ,



 

dodaje kolumny i warunki



 

modyfikuje definicje kolumn jak typy i warunki



 

usuwa warunki



 

   -    



 

  )   %:SJ.        - *

%-   /    - -/  #  -  /   %9$MI  

-  - -/    0%1*

+   ,

ALTER TABLE [user.]table
  [ADD ( {column_element | table_constraint}
      [, {column_element | table_constraint}] ...) ]
  [MODIFY (column_element [,column_element] ...)]
  [DROP CONSTRAINT constraint] ...
  [PCTFREE integer] [PCTUSED integer]
  [INITTRANS integer] [MAXTRANS integer]
  [STORAGE storage]
  [BACKUP]

Parametry:


 

\*] -  "  #  -   - /* 8#    )    

    #     )         *

background image

   Bazy danych

 

     Robert Chwastek

25



 

%Q6AN2B   W   "      -         

    -  # #   #   *



 

% - W   "       # - *



 

IA.    "      -  *



 

%:SJ.  "      #/        0    1     )   

              -  G   -             
wykonywania rozkazu ALTER TABLE.

Opis:

8#   )        %                    

-    #/ )     -   J99* (     

)           A$ J99          
wierszy.

S   6AN2B )  / )       -   ,



 

rozmiar



 

typ danych



 

NOT NULL

5    -       )       lko wtedy, gdy wszystkie

 #      J99* 6)     )   A$ J99

               #  * 8#   
jest rozmiar kolumny zadeklarowanej jako NOT NULL i w klauzuli MODIFY nie poda

 A$ J99           A$ J99*

(                 -            - 

0+M9M:$ K 2IA6 ***1  )    /   #   -    

          *

.  ,

ALTER TABLE pracownicy
  ADD (placa NUMBER(7, 2))
;

ALTER TABLE pracownicy
  MODIFY (placa NUMBER(9, 2))
;

3.3.11.

 

Rozkaz CREATE INDEX

I                -    -     *  N       -#

           -                     *  N 

         )    #                   *

N  )  /  # -  )        NMZ 
danej tabeli lub administrator (DBA).

+   ,

CREATE [UNIQUE] INDEX index ON
 {table(column [ASC|DESC][, column [ASC|DESC]]...) |

background image

   Bazy danych

 

     Robert Chwastek

26

   CLUSTER cluster}
  [INITTRANS n] [MAXTRANS n]
  [TABLESPACE tablespace]
  [STORAGE storage]
  [PCTFREE n]
  [NOSORT]

Parametry:


 

JN;JM  "       )   -                      

 #                *  (         AI%:9MG

#     JN;JM        -   - )   /

    *



 

   "         *         -/       )  

-  -      )   *



 

-  "     -       *



 

column - nazwa kolumny w tabeli.



 

%+:  M+:  "             AI%:9M         

 - #    <        *



 

:9J+$MI    "  #        



 

A+AI$  "      AI%:9MG   )           -     )

                             
indeksu.

Opis:

N        ,



 

             



 

              *

  )     /     )                   

 #              )      #/          

     # - *

      ) -/    ) >H  * Jeden element

            #                *  (

       )  -/  )             -       #/

  *     #/      ) * 8#      

        %  :   #     ) 
do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie

-      )                        :   -
pojedynczej kolumny B lub C.

6)              #           -       - *

  )      /  )               -    

   ) #/ )  #/    *

.  ,

CREATE INDEX i_prac_imie ON pracownicy (imie) ;

background image

   Bazy danych

 

     Robert Chwastek

27

3.3.12.

 

Rozkaz CREATE VIEW

I  )         -  -     -

  - * J /  )  # -  )       
co najmniej uprawnienia SELECT lub administrator.

+   ,

CREATE VIEW [user.]view [(alias [, alias] ...)]
  AS query
  [ WITH CHECK OPTION [CONSTRAINT constraint] ]

Parametry:


 

 "  #   



 

view - nazwa tworzonego widoku



 

X "        -    -   * 5   )

-/        +M9M:$        AIMI B
ani FOR UPDATE.



 

(N$'  :'M:S  A.$NA  "    )                

         #                -

     * S   (N$' :'M:S A.$NA ) -/ )  

-     *



 

:A+$I%N$ "       (N$' :'M:S A.$NA*

Opis:

Widok jest logicznym oknem dla jednej lub kilku tabel. W

      

 # #,



 

widok nie przechowuje danych - jest on przeznaczony do pokazywania danych
zawartych w innych tabelach.



 

 ) -/ )    +;9      )   

)   -       )  )  )     /                  
gdy zapytanie na którym bazuje widok zawiera:


 





 

klauzule GROUP BY, CONNECT BY lub START WITH



 

  N+$N:$    -  )  #  

6)            tóry posiada pseudokolumny

 -    )           J.%$M                -

 ) *

(   )  ,



 

       - -      

  #    -  -  -  



 

  )#   "      ) -/ )       

-   -    )         - *

background image

   Bazy danych

 

     Robert Chwastek

28



 

          "      )  / )  
zmiany nazwy kolumny bez zmiany rzeczywistych danych zapisanych w tabeli.



 

      #*

.  ,

CREATE VIEW bibl
  AS SELECT ksiazki.tytul, autorzy.imie,
            autorzy.nazwisko, miejsca.miejsce
       FROM ksiazki, autorzy, miejsca
       WHERE ksiazki.autor = autorzy.autor_nr
         AND ksiazki.miejsce = miejsca.miejsce_nr
  WITH CHECK OPTION CONSTRAINT chkopt
;

3.3.13.

 

Rozkaz COMMIT

+   ,

COMMIT [WORK]

Opis:

I   :A66N$    :A66N$  (AIS                   a

 7                               
bazie danych.

3.3.14.

 

Rozkaz ROLLBACK

+   ,

ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ]

Parametry:


 

(AIS "          - #     %+N



 

+%OM.AN$ "          IA99%:S



 

savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji.

Opis:

I  IA99%:S      )      0   
klauzuli TO) lub poczatku transakcji (bez klauzuli TO).

.  ,

ROLLBACK ;

ROLLBACK TO SAVEPOINT SP5 ;

3.3.15.

 

Rozkaz SAVEPOINT

+   ,

SAVEPOINT savepoint

background image

   Bazy danych

 

     Robert Chwastek

29

Parametry:


 

savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany
rozkaz

Opis:

I   +%OM.AN$    )         IA99%:S      

            *           -/       

  * +     -         #   

 -     )   /    *

.  ,

UPDATE pracownicy
  SET placa_podstawowa = 2000
  WHERE nazwisko = ‘Kowalski’
;
SAVEPOINT Kow_plac;

UPDATE pracownicy
  SET placa_podstawowa = 1500
  WHERE nazwisko = ‘Nowak’
;
SAVEPOINT Now_plac;

SELECT SUM(placa_podstawowa) FROM pracownicy;
ROLLBACK TO SAVEPOINT Kow_plac;

UPDATE pracownicy
  SET placa_podstawowa = 1300
  WHERE nazwisko = ‘Nowak’
;

COMMIT;

3.3.16.

 

Rozkaz SET TRANSACTION

+   ,

SET TRANSACTION { READ ONLY }

Parametry:


 

IM% A9B "      /

Opis:

I        )            -     /         

  7*   )   )        N+MI$ J.%$M  -

M9M$M*  I   +M$  $I%+%:$NA      /               

       -*

background image

   Bazy danych

 

     Robert Chwastek

30

3.4.  Operacje relacyjne

A  -         -         

  * ()        ,



 

    "  )      -      0 1         # 
warunki;



 

  " )         -  -  0  1



 

 " )       0 1    



 

   #   #     7   *

3.4.1.

 

Selekcja

Operacja 

    )    -       0 1      # 

 * A       ) podzbiorem poziomym.

!  "

#

$ %

&  

'()*)+)*,-'

. 

/"

&

01)-2))(,-'

 

3  

4

++2)2()()*+





!

'))2)2)2(*2

!

 5

4

112(2()2((*

 





(   +;9       )     +M9M:$    ('MIM*

.     ,

SELECT * FROM osoby;

spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie.

(   -         C(  G    C+AG

0#  1  )   /,

SELECT * FROM osoby

    

;

(          -/  )*  .      -   - /      -

          #  0#     "  +$   -  #     "  +A1

)         /        AI       /  

   -,

SELECT * FROM osoby

        

;

background image

   Bazy danych

 

     Robert Chwastek

31

  )7             #   *

3.4.2.

 

Projekcja

.   )    -     #   -    -       

     +M9M:$       * A      )
podzbiorem pionowym.

!  "

#

$ %

&  

'()*)+)*,-'

. 

/"

&

01)-2))(,-'

 

3  

4

++2)2()()*+





!

'))2)2)2(*2

!

 5

4

112(2()2((*

 





&9   :

'()*)+)*,-'

&

01)-2))(,-'

4

++2)2()()*+

!

'))2)2)2(*2

4

112(2()2((*



.              )   /  

     +M9M:$,

 !"    #$%%& '

A         -/     +M9M:$* N

    /          .         -     #

    )   /,

SELECT Pesel, Nazwisko FROM osoby

        

background image

   Bazy danych

 

     Robert Chwastek

32

;

3.4.3.

 

Produkt

. 0    7 1     - * A  )  

    -     - ) )         

  )         *  (           #        

                                   

   )        * .        

  7     *

/















/

/

/













;2

;(

5          7         0 - 1     )

      +M9M:$* .       )   /

      ,

SELECT * FROM R1, R2;

Operacja znajd

         7   )  -/        

       )   - -  #*

3.4.4.

 

 

A                    -             

 #     * (    -    *

background image

   Bazy danych

 

     Robert Chwastek

33

/ 

69

(

2

*

!  

  

3  <==

2

(

/





 %

!  

/

 %

  

/

 %

2

(

2

A            )     /       

SELECT.

SELECT imie, nazwisko, tytul
  FROM autorzy, ksiazki
  WHERE autorzy.nazwisko = ‘Mickiewicz’ and
        autorzy.nr = ksiazki.autor
;

3.4.5.

 

  

A   #            - *  (     +;9      

)    /       0 - 1                 )

-         *
3.4.5.1.

 

Unia

J           -          -        0-

 7  "         #1*  (     #        

#/   -        -   0  1      *  .  

   )    -           #          

    0     1                     

    ,

SELECT imie, nazwisko FROM pracownicy
UNION
SELECT imie, nazwisko FROM wlasciciele ;

3.4.5.2.

 

Przekrój

Prze

       3/         -     -       *   

           * .-     

    #          #/   -        -    
bazowych.

.)                 0*          

1                 # *

background image

   Bazy danych

 

     Robert Chwastek

34

SELECT nazwisko FROM pracownicy
INTERSECT
SELECT nazwisko FROM wlasciciele ;

3.4.5.3.

 



Operacj

-   )              

           *

.       -     #      

niej zatrudnieni:

SELECT imie, nazwisko FROM wlasciciele
MINUS
SELECT imie, nazwisko FROM pracownicy ;

3.4.6.

 

Grupowanie

S    &IAJ.  B    '%ON&           +M9M:$   

 /               - /                 )      

-     /     0       1   *  A          

        *    7        

-        -      0             

    1*

Klauzu

  &IAJ. B )          * +-

        ,

SELECT stanowisko, avg(placa_podstawowa)
  FROM pracownicy
  GROUP BY stanowisko ;

N   )  #/                a grupy.

        ('MIM,

SELECT stanowisko, avg(placa_podstawowa)
  FROM pracownicy
  WHERE stanowisko != ‘KIEROWCA’
  GROUP BY stanowisko ;

    ) -/  ))   )     

      *  (      )         

           )     
stanowiska:

SELECT wydzial, stanowisko, avg(placa_podstawowa)
  FROM pracownicy
  GROUP BY nr_wydzialu, stanowisko ;

S   '%ON&   #            # 

 *  :   #  /                        

       ) ! DDD  )    /      ,

SELECT stanowisko, max(placa_podstawowa)
  FROM pracownicy

background image

   Bazy danych

 

     Robert Chwastek

35

  GROUP BY stanowisko
  HAVING max(placa_podstawowa) > 3000 ;

3.4.7.

 

   !"!#$

S                   +M9M:$         

    #,
1.

 

SELECT i WHERE

2.

 

GROUP BY

3.

 

HAVING

4.

 

ORDER BY

3.5. Podzapytania

5    +;9  -/  ))  *      )

-/ )  *           * .   )  / 
dwa rodzaje:


 

podzapytania proste (nazywane po prostu podzapytaniem) - podzapytanie jest
wykonywane 

przed

       4



 

         "                 )    

    *

 #    )     ('MIM   +M9M:$* 8# 

   )          -      #/       #/     )

)/ -#     ('MIM    -,

SELECT nazwisko
  FROM pracownicy
  WHERE placa_podstawowa =
        (SELECT min(placa_podstawowa)
           FROM pracownicy)
;

. )               -   *

8#               -       #        

)   N     *            

  -         ) )/      ,

SELECT nazwisko, nr_wydzialu
  FROM pracownicy
  WHERE placa_podstawowa IN
        (SELECT min(placa_podstawowa)
           FROM pracownicy
           GROUP BY nr_wydzialu)
;

background image

   Bazy danych

 

     Robert Chwastek

36

9-  #     -/            

operatora IN.

(       / )  )   %B  %99* A  %B

    /   )            * A 

%99 )                  *

+     %B  %99      )       #

  *

.   )  /  )     '%ON&* .)   

#    #  -     )   !D,

SELECT nr_wydzialu, avg(placa_podstawowa)
  FROM pracownicy
  GROUP BY nr_wydzialu
  HAVING avg(placa_podstawowa) >
         (SELECT avg(placa_podstawowa)
            FROM pracownicy
            WHERE nr_wydzialu = 30)
;

5    -/  ))       #/  * .  ) 

  7  )    / ,



 

        )     /     AIMI  B  0)      /

           14



 

     ))             #     -    ))

      -  )            *

Podzapytanie skorelowane jest zapytaniem zagnie

))     

dla 

%                   *  .     #/

                 )             

     *

           )                 

      --   )  #      ,

SELECT imie, nazwisko, placa_podstawowa, nr_wydzialu
  FROM pracownicy pracownik
  WHERE placa_podstawowa >
       (SELECT avg(placa_podstawowa)
          FROM pracownicy
          WHERE nr_wydzialu = pracownik.nr_wydzialu)
;

(               7       7   

          -                    

  * 8#                  

 )           -          

  0              ^   @1*

background image

   Bazy danych

 

     Robert Chwastek

37

3.6.  Widoki (perspektywy)

(            -    -  - 

*  *               )         *  (  

      * (           

     -   -  0 -  1* (      ,



 

     - -   



 

   7     



 

    )#        

5         #/   -                      )

 /  ,



 

proste



 

)

(             +M9M:$           

              )    
danych zawartych w widoku.

Widok

           -        

 7  +;9  )   *

( )          -   )   /  

          *  :       )  #/       

)     #  -  )  #                 0      
wszystkich systemach).

    )   #   :IM%$M ONM(* .)

         -  -          

         0- )  #         1,

CREATE VIEW personalia
AS
  SELECT imie, nazwisko
    FROM pracownicy
;

$    )      -    

opisie rozkau CREATE VIEW:

CREATE VIEW bibl
  AS SELECT ksiazki.tytul, autorzy.imie,
            autorzy.nazwisko, miejsca.miejsce
       FROM ksiazki, autorzy, miejsca
       WHERE ksiazki.autor = autorzy.autor_nr
         AND ksiazki.miejsce = miejsca.miejsce_nr
;

background image

   Bazy danych

 

     Robert Chwastek

38

3.7. Transakcje

$             , :A66N$  IA99%:S*

.       )      -      

                  *  .       

              -      *  A       

       J.%$M "     -    

                     -         *  5

          )  -/    -    - ) *

8#   -        -                   -  -  ^ @   -  

^)@*

I  :A66N$ )            racji.

.             )        -             

  )    *  (                   

  J.%$M  )   / :A66N$              

 * A        -    )    *

I  IA99%:S    # :A66N$* 8   )   7

                      -     
rozkazu COMMIT lub ROLLBACK.

Rozkaz SAVEPOINT pozwala na zaznaczenie i nazwanie pewnego punktu

       *  (     -         IA99%:S  $A  )    

#            0 *                 

     1* (       IA99%:S  $A     #    

             7  )*  (    IA99%:S   -
COMMIT powoduje skasowanie wszystkich uprzednio zaznaczonych punktów.

8  -      -   )        7/     :A66N$   -

IA99%:S*  8#          -     7        -  -           

          /   /* 6)   

    /       -     - 
skrypt.

3.8.  Normalizacja relacji

3.8.1.

 

Cele normalizacji

              -      

) *  8        )    /   )   

0   1  * 8#    -           

     0*         1        3 

     0         /              - /    

           -   - 1*  N    )         

)  #     -    0*          1*

(3                -            

 * I  )   /    - ,

background image

   Bazy danych

 

     Robert Chwastek

39



 

nazwa przedmiotu,



 

imie,



 

nazwisko,



 

(% )*%

.        - /  /,

+,-  * ! "  ".% "

 ul. Królewska 30/3 Kraków)

8               - ,



 

               #                       

)       -  S      -   4



 

   ) /               
redundancja danych;



 

         0* 1   #/  

                 #4



 

    )                       

    )   /4



 

     )    /   )           

-     *

J      #     -           *  8      

)  /       -     ,



 

  . ,

 

 /  %"  0 -"   %" %  (% % " 0 ,%%12"

ulica, nr_domu, nr_mieszkania



 

  5 

 

  " (% )*%

S )        ^5  @                 ^. @  

     -        ^W @*  $            

  #  )   ),



 

          #                 )    

     *   #     4



 

           0*   1        #   

    ^5  @* 5  -      4



 

)               -          /      

   -/ ) -        4



 

          -     *

8        -    #

     *    -     -    

    -   -       *

3.8.2.

 

  

I          #   # -     

*     #  #    -  #*

.    /            -   -   )  -    /   *

( #/   -      )  # -  -   -  

background image

   Bazy danych

 

     Robert Chwastek

40

      * .             
postaci normalnej ilustruje rysunek:

$

>% 

#

%

))2

))(

))*

 .



 .

)2)

)()

)2)

$ %

%

#

 7

$ %  7

#"78

)1+

)11

)')

)1+

)')

  %

 % #?4

$  < 

  %

$  < 

/  %

  -

&"  *

  -

*)

1)

2)

+)

21

>% 

$

>% 

#

%

))2

))2

))(

))*

))*

 .

 .



 .

 .

)2)

)2)

)()

)2)

)2)

$ %

%

#

 7

$ %  7

#"78

)1+

)11

)')

)1+

)')

  %

 % #?4

$  < 

  %

$  < 

/  %

  -

  -

&"  *

  -

  -

*)

1)

2)

+)

21

>% 

3.8.3.

 

Definicje pomocnicze

%-   /                       

postaci normalnej. Przed omówieniem procesu normalizacji konieczne jest jednak

    /,

background image

   Bazy danych

 

     Robert Chwastek

41



 

Uniwersalny schemat relacji R = {A

1

, A

2

, ..., A

n

_  - -  

 *



 

& '    R = {A

1

, A

2

, ..., A

n

} nazywamy zbiór atrybutów S 



R, który jednoznacznie identyfikuje wszystkie krotki relacji o schemacie R. Inaczej

  )       I    /    

1

 i t

2

 )

t

1

[S] = t

2

[S].



 

Kluczem

S     I      -    *  )

nie istnieje K’ 

 S - -      I* S     

    )*



 

Klucz nazywamy kluczem prostym

 )  - -      

jest zbiorem jednoelementowym; w przeciwnym wypadku mamy do czynienia z
   %*   #       )   )/          
nazywamy  kluczami potencjalnymi

*  8  0 - 1      #   

potencjalnych nazywamy 

   (  0    1       

   0  1*

 

            ^5   @              

-  0     N #1*  )   )/ )       

   )     )  /   #*



 

Atrybut relacji nazywamy podstawowym

  )    )              

relacji.



 

Atrybut relacji nazywamy wtórnym

 )    )  )      *



 

Atrybut B relacji R jest 

'  %  -  %    0  # 

 )   ) % identyfikuje B i oznacza A   1  #         #  

-  %      )   #/ - -  *

 

5  )#/            -   %              

         #        )#  

-       #*

 

N   )   -  %        0 *  )           )    %1

                -    %    *  (     -  

 )#                 ^5   @  )    /

  ,

 

background image

   Bazy danych

 

     Robert Chwastek

42

 

# %

$ % %

#  7

/  %

$ %  7

$ >% 

#"78

 



 

Atrybut B jest 

'  % zbioru atrybutów X w schemacie R,

)  Z  Y i nie istnieje podzbiór X’  Z  ) ZG  Y.

 

  )   /     )       )#         

       )#    *



 

Zbiór atrybutów Y jest 

  '   %  zbioru atrybutów X w

  I )  Z  Y i istnieje podzbiór X’  Z  ) ZG  Y.



 

 Z B  5 -   -  -     * .-
atrybutów Z jest 

 '  %  - -  Z # 

- -  5      )  - -  B  -

-  B      )  - -  Z    -

-   Z           )    B    -   -   B    

    )  5*

 

.      ^5   @ -  ^   @  ^%  @ 

     )  -  ^    @  ) - ^N

 @      )  -  ^    @  -  ^ 

 @     ^%   @         )    ^N   @*

I #  )    )/  )  ^N   @           )  

^    @ 0 -/         1   ^%  @

0 )     ) /    *



 

6   )  -   -   B        #        )  

- -  Z   I )           I 
dla dowolnej pary krotek t

1

 i t

2

           )  

1

[X] = t

2

[X], istnieje taka para

krotek s

1

 i s

2

   )

 

s

1

[X] = s

2

[X] = t

1

[X] = t

2

[X] oraz

 

s

1

[Y] = t

1

[Y] i s

1

[R-X-Y] = t

2

[R-X-Y] oraz

 

s

2

[Y] = t

2

[Y] i s

2

[R-X-Y] = t

1

[R-X-Y].

 

background image

   Bazy danych

 

     Robert Chwastek

43

 

6    )         

1

 i t

2

     )  # 

       -     -  Z    -     0     

1

[x] = t

2

[X]),

              #   -     -  B            
sposób krotki s

1

 i s

2

 )  )    *

 

.       / ) ^S  @      ^% @  ^6  @

  )     @8 :@  ^+   @    ^ @ 

  ^8  @  ^8 @    ^%   @             ^    @  

^$   @ )  /    - ,

 

 

   

&

$ %

3  <

/.  

6%"

   

/.  

6%"

3  <

.

6%"

   

.

6%"

  

3%

$%

!%

   ">%

3

$%

   ">%

3%

$%

  

3

$%

   ">%

/"  

$%

  

/"  

$%

 

 

A #   -  Z  R  0   1    B  R  0 1     )  I-X-Y =

0(  1* .    ,

 

t

1

R 0S   %  8 :1

 

t

2

 = (Kowalski, Magda, Systemy operacyjne)

 

odpowiada para krotek

 

s

1

 = (Kowalski, Agnieszka, Systemy operacyjne)

 

s

2

R 0S   6   8 :1

 

  )  /   )        )  

)   #    )#    -   -       0   
wypadku jednoelementowego zbioru atrybutów (Dziecko) od jednoelementowego

- -  0(  11*



 

5     #   )#      ),



 

-         #      )    
zbioru atrybutów X

background image

   Bazy danych

 

     Robert Chwastek

44



 

#  ZBRI  Z     #      )  B     *

 

5 )#           % 

funkcjonalnymi.



 

      I  R  0%

1

, A

2

, ..., A

n

1            -

0   1        0I

1

, R

2

, ..., R

m

1     )   )

schemat R

i

 z tego zbioru stanowi podzbiór zbioru atrybutów (A

1

, ..., A

n

) i

 















    @ @









 

6  )     I R 0%

1

, ..., A

n

1     )#/

   0   , KI\I

1

, ..., R

n

]1                 )   

dekompozycja relacji r (o schemacie R) na relacje r

1

, ..., r

n

 )      

)    /            

1

, ..., r

m

.

 

6)    /  )      #   )#/           

     )#      R <*



 

6  )   )#/    KI\I

1

, ..., R

m

]    )#

atrybutów schematu R od klucza wtedy i tylko wtedy, gdy w dowolnej sekwencji

7                               )

         -      I*

3.8.4.

 

)  

I                )      )   -     0 *  

    )     1        

 )          *

6)    )/  )     ^5   @               

 )   -   ^N   @  ^    @  ^%   @    ^ 

#@        )       "   0^

   @ ^N #@1*

(                 )   /    

      -  -      )  * (

         ^5   @  )  /    , ^ 

   @ ^5    @ ^:#@    -,

$

>% 

#

%

))2

 .

)2)

$ %

%

/  %

  -

))(



)()

&"  *

))*

 .

)2)

  -

 %  >% 

background image

   Bazy danych

 

     Robert Chwastek

45

$

>% 

))2

))2

))(

))*

))*

#

 7

#"78

)1+

)11

)')

)1+

)')

*)

1)

2)

+)

21

>% %

#

 7

$ %  7

)1+

)11

)')

  %

 % #?4

$  < 

< 7

8  /               ) 

  ^     @   ^:#@         -

^N #/@   ^5    @       )  

) 0^    @ ^N #@1*

  )   )/ )   -        

        #         
kluczami prostymi.

.    relacji „Zamówienia” do drugiej postaci normalnej otrzymujemy

    )#   ,



 

Dostawca na zamówieniu

 

background image

   Bazy danych

 

     Robert Chwastek

46

 

# %

$ % %

/  %

$ >% 

 



 

Zamówione dostawy

 

 

#  7

$ >% 

#"78

 



 

:#

#  7

$ %  7

3.8.5.

 

$  

                    #            

    )  -      )      

      )  )        *

%-   /         -           )#

     )   /                   )#/    *

.        ,



<

/



/

<



(            )#/        

   -   ^    @    ^%   @     -   ^

background image

   Bazy danych

 

     Robert Chwastek

47

   @       ^       @*  (              

       ^     @     , ^5   @ 

^ @    -,

$

>% 

#

%

))2

)2)

))(

)()

))*

)2)

>% 

#

%

 .

)2)

$ %

%

/  %

  -



)()

&"  *



)*)

! 21

 %

3.8.6.

 

#  

        I           - Z

B  5   -     I     )  Z   Y  Z = R i podzbiór Y jest nietrywialnie

   #   )  Z*

Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w

          #  )#/ - B  Z   -

    )#/   -      Z*

`    )/ ) - ^.  @      #   )#

funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej,

 )   -   ^ @    ^(  @           )     - 

^   @   *                )        )#/  
atrybutami.

8                #   )#/

                 *  +       )       

       #   )#/     )  /    

 -   /     )#   *

background image

   Bazy danych

 

     Robert Chwastek

48

(        ^.  @ )  /     ,

^@  ^(  @  -   /          #   )#/

  ,

   

$ %

/.  

6%"

.

6%"

3%

$%

   

3

$%

/"  

$%

&

$ %

3  <

6%"

   

6%"

  

$%

&

   ">%

$%

3.8.7.

 

  

        I         wtedy i tylko wtedy,

                   

 )#    KI\I

1

, ..., R

m

]  )#/    )#   -   

klucza.

   ) #         )       

    -     - - )  -  / 0  

-/   1                              

       -   )   / -  - )    

             *

(   )                

           / -   )  *

3.8.8.

 

Podsumowanie

.                     )     #  

  #    -     *

background image

   Bazy danych

 

     Robert Chwastek

49

.               -  / -  

 *  J    7                       -

     -    *  6            -     

     / )#/    -   )      /   

-        #/  *

background image

   Bazy danych

 

     Robert Chwastek

50

4. 

 "

(        )                           

  *

4.1. Operatory

+          +;9     

           *

4.1.1.

 

Operatory arytmetyczne

A               nego. Jednak

             -/  )           %$M*  +   

           - ,

Operator

Opis



( )

5        #/     

  7*  (          

  



  



        *

SELECT (X+Y)/(Y+Z) ...

+, -

Operatory jednoargumentowe zachowania i
zmiany znaku.

... WHERE NR = -1
... WHERE -PLACA < 0

*, /

6)  

SELECT 2*X+1
... WHERE X > Y/2

+, -

Dodawanie, odejmowanie

SELECT 2*X+1
... WHERE X > Y-Z

4.1.2.

 

Operatory znakowe

8                       nkatenacji.

I                    -      *

  )    /  )          :'%I      -/  )  )  <==    *

A          )        -        
operatora konkatenacji.

Operator

Opis



||

S     

SELECT ‘Nazwa: ‘ || ENAME ...

background image

   Bazy danych

 

     Robert Chwastek

51

4.1.3.

 

Operatory porównania

A                   )         

      )7* (            

 #/  0$IJM - 2%9+M1*

Operator

Opis



( )

5

  

 #/

     7

... NOT (A=1 OR B=1)

=

+          )  
równe

... WHERE PLACA = 1000

!=, ^=, <>

+          )  

)

... WHERE PLACA != 1000

>

(  )

... WHERE PLACA > 1000

<

6 )

... WHERE PLACA < 1000

>=

(  -   )

... WHERE PLACA >= 1000

<=

6 -   )

... WHERE PLACA <= 1000

IN

Równy dowolnemu elementowi.
Synonim do „ = ANY”

... WHERE ZAWOD IN
(‘URZEDNIK’, ‘INFORMATYK’)

... WHERE PLACA IN (SELECT
PLACA FROM PRAC WHERE
WYDZIAL=30)

NOT IN

I)     )       *

(     2%9+M  # 
dowolny element zbioru jest równy
NULL
Synonim do „!= ALL”

... WHERE PLACA NOT IN (SELECT
PLACA FROM PRAC WHERE
WYDZIAL=30)

ANY

.     #/     )

 #    -     

 *  6  -/  
jednym z operatorów: =, !=, >, <,

aR  bR*  5    $IJM  # 
przynajmniej jeden z elementów

    *

... WHERE PLACA = ANY (SELECT
PLACA FROM PRAC WHERE
WYDZIAL =30)

ALL

.     #/     )

 #    -     

 *  6  -/  
jednym z operatorów: =, !=, >, <,

aR bR* 5   $IJM #  )

         
warunek.

... WHERE (PLACA, PREMIA) >=
ALL ((14900, 300), (3000, 0))

[NOT]
BETWEEN

\]       -     [  
mniejszy lub równy y.

... WHERE A BETWEEN 1 AND 9

background image

   Bazy danych

 

     Robert Chwastek

52

x AND y
[NOT]
EXISTS

5   $IJM #     \]
zwraca przynajmniej jeden wiersz.

... WHERE EXISTS (SELECT PLACA
FROM PRAC WHERE WYDZIAL =
30)

[NOT]
LIKE

\]        *

9   CcG    )   

        

   0D   -   1     
jest równy NULL. Litera ‘_’

        

  *

... WHERE STAN LIKE ‘T%’

IS [NOT]
NULL

[Nie] jest równe NULL.

... WHERE ZAWOD IS NULL

A  A$ N   2%9+M 0      ('MIM   )

)            1  #   /                 
NULL. Np. rozkaz:

SELECT ‘TRUE’
  FROM prac
  WHERE wydzial NOT IN (5, 15, NULL) ;

   )    )

wydzial NOT IN (5, 15, NULL)

     

wydzial != 5 AND wydzial != 15 AND wydzial !=  NULL

(               # J99   #/

J99*    )         -  #/ J99*

4.1.4.

 

Operatory logiczne

A    )     - 7   #   

0  # -   -     1*

Operator

Opis



( )

5

  

 #/

     7

SELECT ... WHERE x = y AND (a = b
OR p = q)

NOT

5 

 )

 "

gicznego

... WHERE NOT (zawod IS NULL)

WHERE NOT (A=1)

AND

Logiczne ‘i’. Wynik jest równy

$IJM

# 

 #

-

     $IJM

... WHERE A = 1 AND B = 2

OR

Logiczne ‘lub’. Wynike jest równy

$IJM       #/   

... WHERE A = 1 OR B = 3

background image

   Bazy danych

 

     Robert Chwastek

53

jednego operandu jest równa
TRUE

.)   -                 %    AI     )

 #,

AND

true

false

null

true

true

false

null

false

false

false

false

null

null

false

null

OR

true

false

null

true

true

true

true

false

true

false

null

null

true

null

null

4.1.5.

 

  

Operatory zbiorowe 

        7 -    #*

Operator

Opis



UNION

J     - *  `  

-          

      *

... SELECT ...
   UNION SELECT ...

INTERSECT

:#/         - *

.            
tylko raz

... SELECT ...
   INTERSECT SELECT ...

MINUS

A-   )     - *  (

              

       

-            *

M            
tylko raz

... SELECT ...
   MINUS SELECT ...

4.2. 

"

( )     -   #    -  * (

-      )    -/    #*  (   #          )     
operandów.

         ) )  ,



 

numeryczny: 

2 * 2



 

znakowy: 

TO_CHAR(TRUNC(SYSDATE + 7))

background image

   Bazy danych

 

     Robert Chwastek

54

( ) ) -/ )     )    )  #   *,

SET Nazwisko = LOWER(Nazwisko)

N  /   )7,



 

     -  #/  

 

+   ,

 

[table.] { column | ROWID }

 

text

 

number

 

sequence.CURRVAL

 

sequence.NEXTVAL

 

NULL

 

ROWNUM

 

LEVEL

 

SYSDATE

 

UID

 

USER

 

 

.  ,

 

pracownicy.nazwisko

 

%, )*  3

 

10

 

SYSDATE



 

        

 

+   ,

 

: { n | variable } [ :ind_variable ]

 

.  ,

 

:nazwisko_pracownika:nazwisko_pracownika_indykator

 

4(%%5  



 

    

 

+   ,

 

function_name( [DISTINCT | ALL] expr [, expr] ... )

 

.  ,

 

LENGTH(‘Kowalski’)

 

ROUND(1234.567*82)



 

-   )7    

 

+   ,

 

(expr)

 

+expr, -expr, PRIOR expr

 

expr * expr, expr / expr

 

expr + expr, expr - expr, expr || expr

 

.  ,

 

(‘Kowalski: ‘ || ‘Nauczyciel’)

 

LENGTH(‘Nowak’) * 57

 

SQRT(144) + 72



 

   )7    

 

+   ,

 

(expr [, expr], ...)

background image

   Bazy danych

 

     Robert Chwastek

55

 

.  ,

 

(‘Kowalski’, ‘Nowak’, ‘Burzynski’)

 

(10, 20, 40)

 

(LENGTH(‘Kowalski’) * 5, -SQRT(144) + 77, 59)

( )  )  ,



 

 #     +M9M:$



 

jako warunek w klauzulach WHERE i HAVING



 

w klauzulach CONNECT BY, START WITH, ORDER BY



 

klauzuli VALUE w rozkazie INSERT



 

w klauzuli SET rozkazu UPDATE

4.3. Warunki

(         -   )7     *

(        -        #  $IJM   -  2%9+M*  (      /

 )  ,



 

     )  -     

 

<expr> <comparison operator> <expr>

 

<expr> <comparison operator> <query>

 

<expr-list> <equal-or-not> <expr-list>

 

<expr-list> <equal-or-not> <query>



 

porównanie z dowolnym lub ze wszystkimi elementami listy lub zapytania

 

<expr> <comparison> { ANY | ALL }

 

( <expr> [, <expr] ...)

 

 

<expr> <comparison> { ANY | ALL } <query>

 

 

<expr-list> <equal-or-not> { ANY | ALL }

 

( <expr-list> [, <expr_list>] ...)

 

 

<expr-list> <equal-or-not> { ANY | ALL } <query>



 

   )#      -   

 

<expr> [NOT] IN ( <expr> [, <expr>] ... )

 

 

<expr> [NOT] IN <query>

 

 

<expr-list> [NOT] IN

 

( <expr-list> [, <expr-list>] ... )

 

 

<expr-list> [NOT] IN <query>



 

   )#     #

 

<expr> [NOT] BETWEEN <expr> AND <expr>



 

    #/    J99

 

<expr> IS [NOT] NULL



 

            

background image

   Bazy danych

 

     Robert Chwastek

56

 

EXISTS <query>



 

kombinacja innych warunków (podana zgodnie z priorytetami)

 

( <condition> )

 

NOT <condition>

 

<condition> AND <conditin>

 

<condition> OR <condition>

.  ,

Nazwisko = ‘Kowalski’
pracownicy.Wydzial = Wydzialy.Wydzial
Data_urodzenia > ‘01-JAN-67’
Zawod IN (‘Dyrektor’, ‘Urzednik’, ‘Informatyk’)
Placa BETWEEN 500 AND 1500

background image

   Bazy danych

 

     Robert Chwastek

57

5. 

    # !

5.1. Funkcje 

numeryczne



Przeznaczenie



ABS(n)

5    #/ -   - 

ABS(-15)
Wynik: 15

CEIL(n)

5     -     

  -   

CEIL(15.7)
Wynik: 16

FLOOR(n)

5       -     

 -   

FLOOR(15.7)
Wynik: 15

MOD(m, n)

5        -    MOD(7, 5)

Wynik: 2

POWER(m, n)

5   -      *

9-   -/     4

       -*

POWER(2, 3)
Wynik: 8

ROUND(n[, m])

5   -        

  * 8      

  D* 9-  ) -/

  -  0    
odpowiedniej liczby cyfr przed
przecinkiem)

ROUND(16.167, 1)
Wynik: 16.2

ROUND(16, 167, -1)
Wynik: 20

SIGN(n)

5   D #      D "> #  

   D > #     
od 0

SIGN(-15)
Wynik: -1

SQRT(n)

Zwraca pierwiastek kwadratowy liczby n.

8#  aD    -

SQRT(25)
Wynik: 5

TRUNC(m[, n])

5    -     

 * 8#       

  D* 8#     

-      *

TRUNC(15.79, 1)
Wynik: 15.7

TRUNC(15.79, -1)
Wynik: 10

5.2. Funkcje 

znakowe



Przeznaczenie



CHR(n)

Zwraca znak o podanym kodzie

CHR(65)
Wynik: „A”

background image

   Bazy danych

 

     Robert Chwastek

58

INITCAP(string)

5      )   

)         *

INITCAP(‘PAN JAN
NOWAK’)
Wynik: „Pan Jan
Nowak”

LOWER(string)

Zamienia wszystkie litery w podanym

    *

LOWER(‘PAN JAN
NOWAK’)
Wynik: „pan jan
nowak”

LPAD(string1, n 
[, string2])

5     >   #

        

  <* 8#   <     

     * 8#   

  #  > 
zwracane jest n pierwszych znaków z
tekstu string1.

LPAD(‘Ala ma ‘, kota*,
17)
Wynik:
„kota*kota*Ala ma ”

LTRIM(string
[, zbiór])

Usuwa litery z tekstu string od lewej

  )       

 )     -* 8#  - 

       
pusty.

LTRIM(‘xxxXxxOstatn

  G C[G1
Wynik:

^Z[[A   @

REPLACE(string,
search [, replace])

5        )

         
replace.

REPLACE(‘Jack &
Jue’, ‘J’, Bl’)
Wynik:
„Black & Blue”

RPAD(string1, n
[, string2])

5     > 

    #   

 <* 8#   <     

   * 8#   

  #  > 
zwracane jest n pierwszych znaków z
tekstu string1.

RPAD(‘Ala ma ‘, 17,
‘kota*’)
Wynik:
„Ala ma kota*kota*”

RTRIM(string
[, zbiór])

5    >     

         

-* 8#  -     

     

RTRIM(‘Ostatnie

 [[Z[[[G C[G1
Wynik:

^A   [[Z@

SOUNDEX(string)

5       

      

 >* 2  +AJMZ ) -/

)     

   ) - 
wymawianych tak samo.

SELECT nazwisko
FROM bibl WHERE
SOUNDEX (nazwisko)
= SOUNDEX
('Mickiewicz');

SUBSTR(string, m
[, n])

5         

          #

* 8#           

SUBSTR(‘ABCDE’,2,
3)
Wynik:

background image

   Bazy danych

 

     Robert Chwastek

59

        

 * .     
1.

„BCD”

TRANSLATE(
string, from, to)

5           
wszystkich znaków from na znak to.

TRANSLATE(
‘HELLO! THERE!’, ‘!’,
‘-‘)
Wynik:
„HELLO- THERE-”

UPPER(string)

5         

 )  *

UPPER(
‘Jan Nowak’)
Wynik:
„JAN NOWAK”

ASCII(string)

Zwraca kod ASCII pierwszej litery w

    

ASCII(‘A’)
Wynik: 65

INSTR(string1,
string2 [, n [, m]])

5    "   

 <  > #   

    * 8)   

       #/

>* 8#       

  #/ >*

INSTR(
‘MISSISSIPPI’, ‘S’, 5,
2)
Wynik: 7

LENGTH(string)

5   #/      * LENGTH(‘Nowak’)

Wynik: 5

5.3. Funkcje 

grupowe

2                             

  #* #             * S  

&IAJ. B    +M9M:$ )   /      *

S    N+$N:$   -               #  0        
pomijane). Klauzula ALL powoduje wybranie wszystkich wierszy wynikowych do

-     *  (                  

 # J99    :AJ$0K1* ( ) -     

-/  :'%I J6MI - %$M*



Przeznaczenie



AVG( [DISTINCT | ALL]
num)

5    #/ #

  #  

SELECT AVG(placa)
”Srednia” FROM pracownicy

COUNT( [DISTINCT |
ALL] expr)

5   - 
których expr nie jest równe
NULL

SELECT COUNT(nazwisko)
”Liczba” FROM pracownicy

COUNT(*)

5   - 

-   

      

SELECT COUNT(*)
”Wszystko” FROM
pracownicy

background image

   Bazy danych

 

     Robert Chwastek

60

NULL

MAX( [DISTINCT | ALL]
expr)

5     

 #/  )

SELECT MAX(Placa) ”Max”
FROM pracownicy

MIN( [DISTINCT | ALL]
expr)

5       #/

 )

SELECT MIN(Placa) ”Min”
FROM pracownicy

STDDEV( [DISTINCT |
ALL] num)

Zwraca odchylenie

     # 

  # J99*

SELECT STDDEV(Placa)
”Odchylenie” FROM
pracownicy

SUM( [DISTINCT | ALL]
num)

5     # * SELECT SUM(Placa)

”Koszty osobowe” FROM
pracownicy

VARIANCE( [DISTINCT |
ALL] num)

5      #

   #
NULL

SELECT VARIANCE(Placa)
”Wariancja” FROM
pracownicy

5.4. Funkcje 

konwersji

2    )      #     #/  *

A                , typTOtyp.
Pierwszy typ jest typem, z którego wykonywana jest konwersja, drugi jest typem
wynikowym.



Przeznaczenie



CHARTOROWID
(string)

(    
znaków na ROWID

SELECT nazwisko FROM
pracownicy WHERE ROWID =
CHARTOROWID
(‘0000000F.0003.0002’)

CONVERT(string
[,dest_char_set
[,source_char_set ] ])

(   

   )
implementacjami zestawu
znaków. Zestawem

#   J+V%+:NN*

SELECT CONVERT (‘New
WORD’, ‘US7ASCII’, ‘WE8HP’)
”Conversion” FROM DUAL

HEXTORAW (string)

S     

   

      #/

-   )

#/    I%(

INSERT INTO GRAPHICS
(RAW_COLUMN) SELECT
HEXTORAW (‘7D’) FROM
DUAL

ROWTOHEX(raw)

.    #/ 

      
cyfry szesnastkowe

     
liczbie.

SELECT RAWTOHEX
(RAW_COLUMN) ”Graphics”
FROM GRAPHICS

ROWIDTOCHAR

.     

SELECT ROWID FROM

background image

   Bazy danych

 

     Robert Chwastek

61

wiersza na tekst. Wynik

     #/
18 znaków.

GRAPHICS WHERE
ROWIDTOCHAR(ROWID)
LIKE ‘%F38%’

TO_CHAR(n [, fmt])
(konwersja
numeryczna)

S    #/

    

)    

 * 8#  

     

  #/     

 -  /  

  *

SELECT TO_CHAR(17145,
‘$099,999’) ”Char” FROM
DUAL

TO_CHAR(d [, fmt])
(konwersja daty)

S        

)     *

SELECT
TO_CHAR(HIREDATE, ‘Month
DD, YYYY’) ”New date format”
FROM EMP WHERE ENAME =
‘SMITH’

TO_DATE(string [,
fmt])

.     

 * J)  

  #   

-/    
podanego tekstu. Do

  )  

     -

 #/ #   
„DD-MON-YY”

INSERT INTO BONUS
(BONUS_DATE) SELECT
TO_DATE (‘January 15, 1989’,
‘Month dd, YYYY’)
  FROM DUAL

TO_NUMBER (string)

.    

     - 

 -

UPDATE EMP
  SET SAL = SAL +
  TO_NUMBER(
  SUBSTR(‘$100 raise', 2, 3))
  WHERE ENAME =
  'BLAKE’

5.5.  Funkcje operacji na datach



Przeznaczenie



ADD_MONTHS
(date, n)

5       

      -

 * 9- ) -/
ujemna

SELECT ADD_MONTHS
(HIREDATE, 12)
”Next year”
  FROM EMP
  WHERE ENAME =
  ‘SMITH’

LAST_DAY(date)

5     -  

    

SELECT LAST_DAY
(SYSDATE) ”Last”

background image

   Bazy danych

 

     Robert Chwastek

62

podanej dacie.

  FROM DUAL

MONTHS_BETWEE
N (date1, date2)

5   - 

    >   <*

( ) -/   -

* :#/    

#    
31 dni.

SELECT MONTHS_BETWEEN
(‘02-feb-86’, ‘01-jan-86’))
„Months”
  FROM DUAL

NEW_TIME(date, a,
b)

5         

   - #     

      *

.     -   ) 

     -/ 
z:
AST, ADT - Atlantic Standard
or Daylight Time
BST, BDT - Bering Standard
or Daylight Time
CST, CDT - Central Standard
or Daylight Time
EST, EDT - Eastern Standard
or Daylight Time
GMT - Greenwich Mean Time
HST, HDT- Alaska-Hawaii
Standard or Daylight Time
MST, MDT - Mountain
Standard or Daylight Time
NST - Newfoundland Standard
Time
PST, PDT - Pacific Standard or
Daylight Time
YST, YDT - Yukon Standard
or Daylight Time

SELECT TO_CHAR(
NEW_TIME(TO_DATE(
’17:47’, ‘hh24:mi’), ‘PST’,
‘GMT’),
‘hh24:mi’) ”GREENWICH
TIME”
 FROM DUAL

NEXT_DAY(date,
string)

5       
tygodnia podanego w string,

  3 ) 

 * .       -/

      *

SELECT NEXT_DAY(
‘17-MAR-89’, ‘TUESDAY’)
”NEXT DAY”
  FROM DUAL

ROUND(date [, fmt])

5         

       

 * #   

 - ) 7*

SELECT ROUND ( TO_DATE(
‘27-OCT-88’), ‘YEAR’)
”FIRST OF THE YEAR”
  FROM DUAL

SYSDATE

5         *
Nie wymaga podania
argumentów.

SELECT SYSDATE FROM
DUAL

background image

   Bazy danych

 

     Robert Chwastek

63

TRUNC(date [, fmt])

5     -  
jednostki podanej w fmt.

#    7 *
usuwana jest informacja o
czasie.

SELECT TRUNC(
TO_DATE(
‘28-OCT-88’, ‘YEAR’)
”First Of The Year”
  FROM DUAL

(    IAJ  $IJ: ) ) /          

      - - ,

CC, SCC

wiek

SYYY, YYYY, YEAR,
SYEAR, YYY, YY, Y

 0     )  >*DV1

Q

  0      >H"    1

MONTH, MON, MM

 0      >H1

WW

  7  

W

  7 

DDD, DD, J

7

DAY, DY, D

 - ) 

HH, HH12, HH24

godzina

MI

minuta

5.6.  Inne funkcje



Przeznaczenie



GREATEST(expr [,
expr] ...)

5         

 #* (   )

    
konwertowane do typu

   ) 
wykonaniem porównania.

SELECT GREATEST (‘Harry’,
‘Harriot’, ‘Harold’)
”GREATEST” FROM DUAL

LEAST(expr [,
expr] ...)

5       

 #* (   )

    
konwertowane do typu

   ) 
wykonaniem porównania.

SELECT LEAST (‘Harry’,
‘Harriot’, ‘Harold’)
”LEAST” FROM DUAL

NVL (expr1, expr2)

8#  [>    J99 
zwraca expr2, w przeciwnym
wypadku zwraca expr1.

SELECT ENAME
NVL(TO_CHAR(COMM),
‘NOT APPLICABLE’)
”COMMISION”
  FROM EMP
  WHERE DEPTNO = 30

background image

   Bazy danych

 

     Robert Chwastek

64

UID

Zwraca unikalny identyfikator

)    

 *

SELECT USER, UID FROM
DUAL

USER

5      )  

SELECT USER, UID
FROM DUAL

5.7.  Formaty zapisu danych

2      )         ,



 

  - #      4



 

          ) # *

2    )      $AW:'%I  $AW%$M*

5.7.1.

 

Formaty numeryczne

2       )            $AW:'%I  

    #    #/   *

J)                         -

  *

8   #/          )      

  #/          CKG*

.)   -            )    /      
numerycznego:

Element

 

Opis

9

9999

9- CFG  #  #/ #  

0

0999

.   

$

$9999

.  #/   CTG

B

B9999

(#       0    1

MI

9999MI

(#  C"C   # 

PR

9999PR

(#   #/         CaG
‘>’

, (przecinek)

9,999

(#      

. (kropka)

99.99

(#       

V

999V99

6)  #/  >D

n

    -   

po ‘V’

E

9.999EEEE

(#  -      0 

  /        M1

DATE

DATE

Dla dat przechowywanych w postaci numerycznej.

(#      C66QQBBG

5.7.2.

 

Formaty dat

2    )    $AW:'%I   #    * 6 -/

 ) )    $AW%$M        #   *
Format standardowy, to ‘DD-MON-YY’.

background image

   Bazy danych

 

     Robert Chwastek

65

Elementy formatu dat przedstawia tabela:

Element

Opis

SCC lub CC

( 4 C+G          C"C

YYYY lub SYYYY

:     C+G         
‘-‘

YYY, YY lub Y

Ostatnie 3, 2 lub 1 cyfra roku

Y,YYY

Rok z przecinkiem na podanej pozycji

SYEAR lub YEAR

Rok przeliterowany. ‘S’ powoduje poprzedzenie daty przed

     C"C

BC lub AD

5 :Q% 0   Q  1

B.C. lub A.D

Znak BC/AD z kropkami

Q

S     0> < ! - L1

MM

6 0D>"><1

MONTH

       F      

MON

$         

WW

$7   0>"=<1 0 7        
i trwa 7 dni)

W

$7  0>"=1 0 7      

   V 1

DDD

7   0>"!HH1

DD

7  0>"!>1

D

7  0>"V1

DAY

       F      

DY

Trzyliterowy skrót nazwy dnia

AM lub PM

( 3  

A.M. lub P.M.

( 3     

HH lub HH12

Godzina (1-12)

HH24

Godzina (1-24)

MI

Minuta (0-59)

SS

Sekunda (0-59)

SSSS

+    0D"EH!FF1

/ .,

Znaki przestankowe umieszczane w wyniku

”...”

:      

       #   ) )/,



 

26 " ^2   6@   Q           
liczb zerami;



 

$' "                #     -      *  L

TH

 dla

liczby 4;



 

+. "        )     



 

+.$' - $'+. "  +.  $'*

background image

   Bazy danych

 

     Robert Chwastek

66

6.  Programowanie proceduralne - PL/SQL

6.1. Wprowadzenie

I   +;9             - 

        #               #  -     

         *        A        

         +;9         .9Q+;9*

PL/SQL pozwala wykorz

  /           +;9*

(                 0%9$MI  :IM%$M    IM%6M1   
niektóre rozkazy kontroli danych jak CONNECT, GRANT i REVOKE.

S        .9Q+;9                  +;9   z

7   *  6)                    

+;9    +;9       0 *      1

 * S )   .9Q+;9 7  # *

PL/SQL pozwala na definiowa

 * 5 )    

     7    - 7         3      *  8    

  -/       )* S )    * $

                     +;9G*  5       

         *,

premia NUMBER(7, 2);

(  #/           ^,R@ *,

podatek := cena * stopa;

 )  #/     #   )   +M9M:$  - 2M$:' 

   #  ,

SELECT placa INTO placa_aktualna FROM pracownicy
  WHERE nazwisko = ‘Nowak’ ;

.9Q+;9                  

pola.

N   )  #/       *          -  

                   )    :A+$%$  

        #  *          

  ,

stopa_premii CONSTANT NUMBER(3, 2) := 0.10;

(   -        - *  8           0    

      1*  6)      )     c$B.M              *  

   * 5         /       

   -   0 )     )/ )       -

  1,

tytul books.tytul%TYPE

6)       )                   

- * (     ) )/    cIA($B.M*

background image

   Bazy danych

 

     Robert Chwastek

67

( .9Q+;9 )   /        7,

R UR a b bR aR* 6    /     )  ,    

    0         1*

6.2. Struktura 

bloku

S  .9Q+;9     -  *         ,

DECLARE

  deklaracje

BEGIN

  rozkazy wykonywalne

EXCEPTION

-      

END;

S )  -   )    /    -     *  -      -/   ))*  (

.9Q+;9           -  0 *      

 -    1*      )                      

  -  *  6)       /                 )

-  * A-  -   )            

  * 5  -       #   -   

 /      *          -       - *

N       -        -     -    

-            0-   1*  N     -      /

  -      ) -      7  

 - *       -    -     )                   

  )           -  *              - 

     -         ))   ) 

       -   -  *

6.3.  Procedury i funkcje

PL/SQL w wersji 2.0 pozwala na definiowanie funkcji i procedur.

+         ,

PROCEDURE name [ (parameter [, parameter] ... ) ] IS
  [local declarations]
BEGIN
  executable statements
[EXCEPTION
  exception handlers]
END [name];

+            ,

var_name [IN | OUT | IN OUT] datatype
  [{ := | DEFAULT } value]

background image

   Bazy danych

 

     Robert Chwastek

68

A #                  )    /   7   *    

)      * N$0=1*

.        # "      *     

  .IA:MJIM  7       -  #     *   

       * . -        -    * : 

     N+ 7   M 0  )  

 /   1* :#/    0   N+  M&N1  

   -    * (      )   M:9%IM* :#/

     0  M&N    MZ:M.$NA   -  M1        

.9Q+;9*  (     #      /        *    

      -         ,

PROCEDURE zwieksz (prac_id INTEGER, kwota REAL) IS
  placa_aktualna REAL;
BEGIN
  UPDATE pracownicy SET placa_podstawowa  =
         placa_podstawowa + kwota
    WHERE prac_id = id_pracownika;
END zwieksz;

5         -     #*              

     )       IM$JI*

FUNCTION name [ (argument [, argument] ... ) ]
  RETURN datatype IS
  [local declarations]
BEGIN
  executable statements
[EXCEPTION
  exception handlers]
END [name];

(       /       IM$JI* I 

IM$JI       7                      

 * (        /      IM$JI

  -/  )* (   )  /     

  *  8#         7       IM$JI     .9Q+;9  

      *  (           IM$JI    )    /

)   ) *

6.4. Kursory

W celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany

       *  (                    

    * .9Q+;9      /  7          /    

             * .9Q+;9 )
dwóch typów kursorów:

background image

   Bazy danych

 

     Robert Chwastek

69



 

   "  )    )    -      /         7   

         /       0 # 

   2AI14



 

   "  .9Q+;9                    
operacji.

8#                     )              

- )                * S 

 #    -   .9Q+;9            * +-

        ,

DECLARE

6( %7  %" 

    FROM pracownicy

(  89:::'

  ...
BEGIN
  ...

+                 *  

       )   /    A.M   
sposób:

OPEN prac_kursor;

(              )

  2M$:'* S )     2M$:'        

   * I  2M$:' ) -/ )     -,

FETCH prac_kursor INTO prac_nazw, prac_wydz;

.  7            

      - *       :9A+M *,

CLOSE prac_kursor;

S )            -        #         *

     -          CcG        -#      

 * 5     -   ,



 

cA$2AJ " $IJM #      2M$:'  7    
powodu braku wierszy



 

c2AJ " $IJM #      2M$:'  7   



 

%ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora)



 

cN+A.M " $IJM #     

        - ) -  rsora:

LOOP
  FETCH prac_kursor INTO prac_nazw, prac_wydz;
  IF prac_kursor%ROWCOUNT > 10 THEN

 

;; , 5<:

  ...
  EXIT WHEN prac_kursor%NOTFOUND;
  ...
END LOOP;

background image

   Bazy danych

 

     Robert Chwastek

70

6.5. Rekordy

(     .9Q+;9             )   -  

   * S )            *

I   )   #       #  

-    *  .9Q+;9       /          
wierszom w tabeli, widoku lub kursorze, nie pozwala jednak na definiowanie typów
poszczególnych pól.

               #/      *  8#     

          -                          

    )              - 
%ROWTYPE:

DECLARE
  CURSOR prac_kursor IS
    SELECT nazwisko, wydzial, data_zatrudnienia
      FROM pracownicy;
  prac_rek prac_kursor%ROWTYPE
...
  FETCH prac_kursor INTO prac_rek;

Rekor

 ) -/             )  

   -     -,

nazwa_rekordu nazwa_tabeli%ROWTYPE;

I          ,

DECLARE
  prac_rek pracownicy%ROWTYPE;
  ...
BEGIN
   ...
END;

      )             

      ,

nazwa_rekordu.nazwa_pola;

%-      /            0  )   

#    W 1 )   /,

suma := suma + prac_rek.placa;

6)       #      -      #*   )

   / )         #       

 #    -   *

.     #         )    /       

  C,RG    -,

  % =  (%! 4(!>!  5 '

J)          ,

prac_rek.nazwisko := UPPER(prac_rek.nazwisko);

.    #   )  e jest na dwa sposoby:



 

    #      0   -   

  /       - - 4

background image

   Bazy danych

 

     Robert Chwastek

71



 

   #      +M9M:$ *** N$A - 2M$:' *** N$A

J)           ,

DECLARE
  prac_rek1 pracownicy%ROWTYPE;
  prac_rek2 pracownicy%ROWTYPE;
BEGIN
  SELECT nazwisko, imie, wydzial, placa_podstawowa
    INTO prac_rek1 FROM pracownicy
    WHERE wydzial = 30;
  prac_rek2 := prac_rek1;
  ...
END;

.9Q+;9         2AI   * +      

  ,

DECLARE
  CURSOR prac_kursor IS
    SELECT nazwisko, imie, wydzial, placa_podstawowa
      FROM pracownicy;
BEGIN
  FOR pracownik IN prac_kursor LOOP
    suma := suma + pracownik.placa_podstawowa;
    ...
END LOOP;

Niejawnie deklarowanym rekordem jest tu zmienna o nazwie pracownik. Zmienna ta jest

            -              
nazwa_kursora%ROWTYPE.

6.6. 

$ % 

6.6.1.

 

Informacje podstawowe

                       )

 *  (#    )   /    ,  -      -

            #       *      )     

  )   -  )     / -    * (

           -       ^.   @    

         7        *  (      

0:PP  8 ?   .9Q+;91      #    -  - *  8        

-          -               /   

      -      /     *

(          - * (    

   0   1     )   * .   

     -/, ^A  @ ^? - @* (  

.9Q+;9  )    )   /        #      -    .9Q+;9*

background image

   Bazy danych

 

     Robert Chwastek

72

.     )             ^.   )   @   -

  /  )          -   *  &     -         

    0 1   *                      

                         -

       0   -    1*  (             

       *  (   )      -/          

   I%N+M* (            -  

7                 -               

                 -       -            

  * 8#   -                *

.                   ^     @

05MIAWNONM1    - -    3   :Q5,

DECLARE
  cz_wsk NUMBER(3,1);
BEGIN
  ...
  SELECT cena / zysk FROM akcje

  ?@';;0%5 % 2 ,)

-- ZERO_DIVIDE

  INSERT INTO informacje (nazwa, c_z)
    VALUES (‘ABC’, cz_wsk);
  COMMIT

EXCEPTION
  WHEN ZERO_DIVIDE THEN
    INSERT INTO informacje (nazwa, c_z)
      VALUES (‘ABC’, NULL);
    COMMIT;
  ...
  WHEN OTHERS THEN
    ROLLBACK;

END;

.                 *  5        

          -  -  -   )          

          *  (   #       -/    

 #    )  ,

BEGIN
  SELECT ...

 

;;%%! &- A&   BC

  SELECT ...

;;%%! &- A&   BC

  SELECT ...

;;%%! &- A&   BC

END;

background image

   Bazy danych

 

     Robert Chwastek

73

.    - -  -            

   #/       )        *

$     -   )     #         /    

  ,

BEGIN
  SELECT ...
  SELECT ...
  SELECT ...
EXCEPTION
  WHEN NO_DATA_FOUND THEN

===D;%&*   B&- 3A&   BC

END;

(            #/          *

5      )  )      -     -)*  8#       

    -           -     ) 

    - -      *

6.6.2.

 

* '

$     .9Q+;9                   

    -         *  (                  

  #     * (-       ),



 

:JI+AIW%9IM%BWA.M "       -    )
otwartego;



 

J.WO%9WAWNMZ  "             -        

N+MI$  - J.%$M    -        
w indeksie zadeklarowanym jako UNIQUE;



 

NO%9NW:JI+AI "       -      
kursora (np. nie otwartego);



 

NO%9NWJ6MI "       -       
numerycznego z tekstu, który nie reprezentuje liczby;



 

AW%$%W2AJ  "               +M9M:$      /

      )  0* +M9M:$ *** N$A14



 

+$AI%&MWMIIAI  "             -           -

    #  4



 

$AAW6%BWIA(+ "          +M9M:$    

)           0* +M9M:$ *** N$A14



 

O%9JMWMIIAI "           #  
lub pola;



 

ZERO_DIVIDE - próba dzielenia przez zero;

6.6.3.

 

   (

%- -)/ 0^  /@1            -

    *            #  -    .9Q+;9        

   MZ:M.$NA               7  -  *  S )   

background image

   Bazy danych

 

     Robert Chwastek

74

-         ('M            

 $'M                     #

  -* 2  -   7    -       

  )         -  * A    A$'MI+

0          1       /     -       

   0 *        #1*  A   #/  MZ:M.$NA    

  ,

EXCEPTION
  WHEN ... THEN

;;%&*  ,)

  WHEN ... THEN

;;%&*  ,)

  WHEN ... THEN

;;%&*  ,)

  WHEN OTHERS THEN

;;%&* (% %  B ,)3

END;

8#       -              )         )

       /   ('M     AI,

WHEN over_limit OR under_limit OR VALUE_ERROR THEN
  ...

  )    )/    A$'MI+        #*  +   A$'MI+     

 /   *   )    /   )  )          )  -/

        -   -  *

(     -                      

*        -  -  *

6.6.4.

 

* ' % 

8  .9Q+;9      )                

  *(        -/                   #

              I%N+M*

(     -     ) )       

    MZ:M.$NA*              ,

DECLARE
  overflow EXCEPTION;
  result NUMBER(5);
BEGIN
  ...
END;

  )   /     )           .9Q+;9      -   0

 7     1                 # 

  * (           )     )   # 

             *  (     )  -/   )  )   
rozkazach SQL.

background image

   Bazy danych

 

     Robert Chwastek

75

  )                -  *

6)     /      ) -  *

Jak podano w

#                   

  *  (        )       -/    

  * +)     I%N+M* J)         ,

DECLARE
  brak_czesci EXCEPTION;
  liczba_czesci NUMBER(4);
BEGIN
  ...
  IF liczba_czesci < 1 THEN
    RAISE brak_czesci;
  END IF;
  ...
EXCEPTION
  WHEN brak_czesci THEN

;;%&* &- A&  -1 C

END;

6)       )     0       I%N+M1     

    ,

RAISE INVALID_NUMBER;

:       #/                      

-               -     *  .    )     -/

     -    ))      - -  

 *  (           )      )     I%N+M       -

 *   )    /  )             -        

      -              

-         #* .-            #

        -            *

6.7. 

!& !

6.7.1.

 

Rozkaz OPEN

Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem

      -   -   -             *  S

   )          *

+   ,

OPEN cursor_name
 [(input_parameter [, input_parameter] ... )] ;

Parametry:


 

cursor_name - nazwa kursora uprzednio zadeklarowanego, który nie jest aktualnie
otwarty.



 

 W    "  )  .9Q+;9        * 8

   #  )              0 #        
klauzuli WHERE).

background image

   Bazy danych

 

     Robert Chwastek

76

 

.          A.M    -/  )                 #/

            * N #/        A.M

  -/      #               *  .         A.M

)                 -/   
celu pobrania ich z kursora.

 

.             0      A.M1       

  0     1 ) - /    -,



 

    



 

      

 

(       #/  )        A.M

                            

      *  (               -/         

 #  )  )  -/            

  CRbG* +- ) - )  #      ,

 

DECLARE

 

 CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS ...

 

BEGIN

 

  OPEN prac_kur(‘Kowalski’, 10);

 

  ...

 

  OPEN prac_kur(wydz => 15, nazw => ‘Nowak’);

 

END;

 

6)  ) /   #                   )

      /  )                

 /              *

6.7.2.

 

Rozkaz CLOSE

I   :9A+M  )                  *  S )   

        /    * I  :9A+M    

 -    -  *

+   ,

CLOSE cursor_name ;

Parametry:


 

cursor_name - nazwa aktualnie otwartego kursora.

6.7.3.

 

Rozkaz FETCH

I   2M$:'                      -  0 

         +M9M:$     1*  A    

        *  5             #    
kolumn w aktualnym wierszu.

+   ,

FETCH cursor_name INTO
  { record_name |
    variable_name [, variable_name] ... } ;

Parametry:

background image

   Bazy danych

 

     Robert Chwastek

77



 

cursor_name - nazwa aktualnie otwartego kursora.



 

?  - W  "            * (  

  #  -/     *   )    

 /       * (        -/      

        -      *



 

W   "       -     0      )   - 
%ROWTYPE).

.  ,

...
OPEN prac_kursor;
...
LOOP
  FETCH prac_kursor INTO prac_rek;
  EXIT WHEN prac_kursor%NOTFOUND;
  ...
END LOOP;

6.7.4.

 

Rozkaz SELECT ... INTO

Rozkaz SELECT ... INTO odczytuje informacje z bazy danych i zapisuje je do

* (   .9Q+;9     0 +;91   +M9M:$   

   N$A* %-           - +M9M:$    

         0              )     /         

   /  1*

+     +M9M:$      N$A,

SELECT select_list_item [, select_list_item] ... INTO
  { record_name |
    variable_name [, variable_name] ... }
  rest_of_select_statement ;

Parametry:
Zobacz opis rozkazu FETCH.

.  ,

SELECT nazwisko, placa*12 INTO pnazw, plac_sum
  FROM pracownicy
  WHERE pracownik_nr = 12345;

6.7.5.

 

Rozkaz IF

Rozkaz IF pozwala na warunkowe wykonywanie rozkazów.

+   ,

IF plsql_condition THEN seq_of_statements
  [ELSEIF plsql_condition THEN seq_of_statements]
  ...
  [ELSE seq_of_statements]
END IF;

Parametry:


 

 X W  "  0  ) -     # 1

background image

   Bazy danych

 

     Robert Chwastek

78



 

XWW   "        -/       0-3

  1    

Opis:

I   N2       )/                -  

   0 -     1*  8#                        

      $'M )       M9+MN2 M9+M  - M

N2             - )      

M N2* (                  

  M9+MN2* 8#              

         $'M             N2     7*  8#      

  )             M9+MN2*

8#  )                    M9+M

0#    1*  (  -           J99          

   *

.  ,

IF liczba_czesci < 20 THEN
  ilosc_zamawianych := 50;
ELSEIF liczba_czesci < 30 THEN
  ilosc_zamawianych := 20;
ELSE
  ilosc_zamawianych := 5;
END IF;
INSERT INTO zamowienia
  VALUES(typ_czesci, ilosc_zamawianych);

6.7.6.

 

Rozkaz LOOP

I   9AA.  )               .9*Q+;9*     

     ,



 

    



 

  ('N9M



 

  2AI 



 

   2AI  

+   ,

[<<label_name>>]
[ { WHILE plsql_condition } |
  { FOR {numeric_loop_param | cursor_loop_param } } ]
LOOP seq_of_statements END LOOP [ label_name ] ;

+   W W  ,

index IN [REVERSE] integer_expr .. integer_expr

+   W W  ,

record_name IN
  { cursor_name [(parameter [, parameter] ...)] |
    ( select_statement ) }

background image

   Bazy danych

 

     Robert Chwastek

79

Parametry:


 

  - W  "                * 6)    

)        MZN$    #          /

#*  .    )                        

   #                 ,

 

label_name.index



 

XWW   "      -     



 

 X W  "   .9*Q+;9* (   ('N9M    -  

   )    *  A                       

         #/  $IJM*  (                

       *



 

[ "      2AI*    #     *



 

 W[  "    )            -      *  ( )     

-         #    2AI*



 

IMOMI+M "      / [ 0       1*



 

W   "              *  (     #  

  2AI        *



 

   "          0#         
parametrami).



 

  W   "                       

)   *  .9*Q+;9               -          0

     1*

Opis:

N            -    )    *

$               7         MZN$*  .  

    ,

<<loop1>> LOOP
  ...
  IF (x > 10) THEN EXIT loop1;
  ...
END LOOP loop1;

. ('N9M      /            

  * (   -    )        *

(          )    /    * .  ,

WHILE x < 10 LOOP
  ...
  x := x - y;
  ...
END LOOP;

.  2AI        /            #    #/   *  

                     )     

    * N  ) -/      -  * .  ,

FOR i  IN 1 .. n LOOP
  silnia := silnia * n;

background image

   Bazy danych

 

     Robert Chwastek

80

END LOOP;

.   2AI  )    /   )                  

  0 -     1*  :                         )

 * .  ,

DECLARE
  CURSOR prac_kursor IS select * FROM pracownicy;
  prac_rek prac_kursor%ROWTYPE;

BEGIN
  ...
  FOR prac_rek IN prac_kursor LOOP
    suma := suma + prac_rek.placa_podstawowa;
  END LOOP;
  ...
END;

6.7.7.

 

Rozkaz EXIT

I  MZN$ )  #   * I      , -    

  *

+   ,

EXIT [label_name] [WHEN plsql_condition] ;

Parametry:


 

  - W  "            / #* 8#     

      MZN$   #   -   ))    
wykonywanej.



 

 X W   "  )         MZN$     *  6  -/   

   .9*Q+;9* (#           - 

    #/ $IJM*

6.7.8.

 

Rozkaz GOTO

I   &A$A  )     hmiastowego przekazania sterowania od rozkazu

              *

+         ,

<< label_name >>

+     &A$A,

GOTO label_name ;

Opis:

I   &A$A  )                      

-     -  -                  -    *  5     -

  )       -         -    *  

)     )                 *  8#      &A$A

)               2AI                  
automatycznie.

background image

   Bazy danych

 

     Robert Chwastek

81

7. Literatura

1.

 

Wojciech Cellary, Zbyszko Królikowski “Wprowadzenie do projektowania baz danych
dBase III”, Wydawnictwa Naukowo -Techniczne, Warszawa 1988

2.

 

ORACLE SQL Language Reference Manual

3.

 

ORACLE PL/SQL User’s Guide and Reference

4.

 

ORACLE SQL*Plus User’s Guide and Reference