Download as pdf or txt
Download as pdf or txt
You are on page 1of 81

Robert Chwastek

Bazy danych

Bazy danych

Robert Chwastek

    
                    
                   w Krakowie.                                

Copyright (c) Robert Chwastek, Krakw 1996.

Bazy danych

Robert Chwastek

  
1.

    E ............................................................................................................................................ 5
1.1. 1.2. 1.3. 1.4. DEFINICJA BAZY DANYCH ............................................................................................................................................... 5 S       
........................................................................................................................... 6 TRANSAKCJE .................................................................................................................................................................. 6 J       
 
........................................................................................................................ 7 SPIS TYPW DANYCH ...................................................................................................................................................... 8 TYP NUMERYCZNY ......................................................................................................................................................... 8 KONWERSJE TYPW ..................................................................................................................................................... 10 W    ......................................................................................................................................................... 10

2.

TYPY DANYCH ............................................................................................................................................................... 8 2.1. 2.2. 2.3. 2.4.

3.

MODEL RELACYJNY .................................................................................................................................................. 12 3.1. STRUKTURY 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. OPERACJE 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. PODZAPYTANIA ............................................................................................................................................................ 35 3.6. WIDOKI (PERSPEKTYWY).............................................................................................................................................. 37 3.7. TRANSAKCJE ................................................................................................................................................................ 38 3.8. NORMALIZACJA 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. OPERATORY ................................................................................................................................................................. 50 4.1.1. Operatory arytmetyczne......................................................................................................................................... 50 4.1.2. Operatory znakowe ................................................................................................................................................ 50 4.1.3. Operatory porwnania .......................................................................................................................................... 51 4.1.4. Operatory logiczne ................................................................................................................................................ 52 4.1.5.   
     ........................................................................................................................................ 53

Bazy danych Robert Chwastek 4.2. W    ................................................................................................................................................................. 53


4.3. 5. WARUNKI..................................................................................................................................................................... 55 STANDARDOWE FUNKC 


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

5.1. FUNKCJE NUMERYCZNE ............................................................................................................................................... 57 5.2. FUNKCJE ZNAKOWE...................................................................................................................................................... 57 5.3. FUNKCJE GRUPOWE ...................................................................................................................................................... 59 5.4. FUNKCJE KONWERSJI.................................................................................................................................................... 60 5.5. FUNKCJE OPERACJI NA DATACH ................................................................................................................................... 61 5.6. INNE FUNKCJE .............................................................................................................................................................. 63 5.7. FORMATY ZAPISU DANYCH........................................................................................................................................... 64 5.7.1. Formaty numeryczne ............................................................................................................................................. 64 5.7.2. Formaty dat ........................................................................................................................................................... 64 6. PROGRAMOWANIE PROCEDURALNE - PL/SQL................................................................................................. 66 6.1. WPROWADZENIE .......................................................................................................................................................... 66 6.2. STRUKTURA BLOKU...................................................................................................................................................... 67 6.3. PROCEDURY I FUNKCJE ................................................................................................................................................ 67 6.4. KURSORY ..................................................................................................................................................................... 68 6.5. REKORDY ..................................................................................................................................................................... 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

Bazy danych

Robert Chwastek

1.
1.1.

 

 

Definicja bazy danych

W pewnym uproszczeniu przez               


  danych, a przez system bazy danych                                                      

        
             
        rozumiany jako:           
    
                       !    "               
      
      !                                                jest opis semantyki (znaczenia) danych, przechowywanych w bazie. System bazy danych             
                 modelu danych. Przez model danych rozumiemy                  
   #           

    rzeczywistego, istotnych z punktu widzenia danego zastosowania tworzy schemat bazy danych. Baza danych jest modelem logicznie spjnym       celowi. W                     
 
         #          
     
                      
      
   aplikacjami                              
                          tym celu aplikacje. $           !                                                             Schemat jest opisem struktury (formatu) przechowywanych danych oraz wzajemnych   %    

Bazy danych

Robert Chwastek

1.2.

     


  
    danych (SZBD) jest to zestaw programw                      jest oprogramowaniem oglnego przeznaczenia. System bazy danych                         
    

   

1.3.

Transakcje

                            


                                                                           przypadku niepowodzenia ktrejkolwiek z nich wycofuje instrukcje uprzednio wykonane.                       






   
 
   
       
    

 

   

Bazy danych

Robert Chwastek

1.4.


       


&                         


            ' 

  '     definiowanie struktury danych przechowywanych w bazie, czyli tworzenie schematu implementacyjnego         $   ' 

  $'                                  ' 

  '         transakcjami (np. zatwierdzanie lub wycofywanie)      %    ' 

             zgodnych z podanymi warunkami

Bazy danych

Robert Chwastek

2.
2.1.

Typy danych
Spis typw danych
Opis 
    
           
                          Synonim do char W aktualnej wersji ORACLEa jest to synonim do char, konieczne jest                  
     
         Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e.        ( $)**  +, &-./ 
    
      0   $           
   synonim do long 
    
            1     
         
        
        
    
         
      
        
    szesnastkowej.                     
             przechowywana, ale obliczana na podstawie informacji o fizycznym                             
       ROWIDTOCHAR.      &
   
       , -129 124 10 do 9.99 * 10 $   
   
                  

Typ char(size)

character varchar(size)

date long long varchar raw(size)

long raw

rowid

number

2.2.

Typ numeryczny

                                             trzech sposobw:  number  number (precyzja)  number (precyzja, skala)
8

Bazy danych

Robert Chwastek

                    -                        -84 do 127. W momencie definiowania kolumny numerycznej dobrym zwyczajem jest                                            &          
     &           
  &           
                 "       ,       
                     )                                 "       
 
       '                      
               
    ,                 9.87E-2 oznacza 9.87 * 10-2.                 )1 ' /           $                                

Bazy danych

Robert Chwastek

Specyfikacja number number(*) number(*, s) number(p) number(p,s) decimal decimal(*) decimal(*, s) decimal(p) decimal(p, s) integer smallint float float(*) float(b) real double precision

Typ number number number number number number number number number number number number number number number number number

Precyzja 38 38 38 p p 38 38 38 p p 38 38 38 38 b 63 binary (18 decimal) 38

Skala null null s 0 s 0 0 s 0 s 0 0 null null null null null

2.3.

Konwersje typw
     
           
           

               


                 
                    
       )1 ' Z typu Do typu

char
char number date   TO_CHAR TO_CHAR

number
TO_NUMBER    

date
TO_DATE TO_DATE  

2.4.

  

  
                             ''      ,        
   

     ''          ''    '                                '    
10

Bazy danych

Robert Chwastek

 ' )$$ ,    )$$        ,  )$$   ''    
  
    ''     
                   ,,,  ''  ''  ''  ,,,   ,,    ,,, 2 ,,,3 4 ,, &                  ''  )  '' &                            ''                          '' )1 '                )$$ 4  ''           '         
  
   &      )1 '  
       

11

Bazy danych

Robert Chwastek

3.

Model relacyjny

#
                podstawowych elementw:  relacyjnych struktur danych                      bazy danych     
             

3.1.

Struktury danych w modelu relacyjnym

                  nu  % 


               bazach danych relacja przedstawiana jest w postaci tabeli. Relacja jest zbiorem krotek               5              5                        5                                                                              

  
                



    
   
  

 


  !  

  #



   

 "   

$  


 

 %&    

              
        
         
      
 
12

Bazy danych

Robert Chwastek

                                       


         
                               
          jedna jak i druga terminologia.        zbir encji wraz z atrybutami      %                                        5                                         zabezpieczenie przed tym powtrzeniem jest realizowane poprzez pola kluczowe. Wiersze               
                                                                                     5          
                  !              
      tabeli.                                                   Unikaj powtarzania informacji w bazie danych (normalizacja).

3.2.

 

 QL


             '    )               Rozkaz ALTER TABLE Typ DDL

CREATE INDEX CREATE SEQUENCE CREATE TABLE

DDL DDL

DDL

Opis                            Tworzy indeks dla tabeli         
               
   unikalnych identyfikatorw w tabelach               przestrzeni dla danych
13

Bazy danych

Robert Chwastek

CREATE VIEW DELETE DROP obiekt INSERT RENAME SELECT UPDATE COMMIT ROLLBACK SAVEPOINT SET TRANSACTION

DDL DML DDL DML DDL DML DML DML DML DML DDL

              innych widokw                         Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku #         
    Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej lub kilku tabel Zmienia dane w tabeli 5%                            
 punktu. Zaznacza punkt, do ktrego mozliwe jest wykonanie rozkazu ROLLBACK #               odczytu).

3.3.
3.3.1.

    
Definicje podstawowe

 

         
                    1                          +6/  +7/             
    !            napisanych w ten sposb aplikacji.                            '            '   ORACLEa przedstawia tabela: access as check create delete exists graphic in integer lock noaudit of order add asc cluster current desc file group increment intersect long nocompress offline pctfree all audit column date distinct float having index into maxextents not on prior alter between comment dba drop for identified install is minus nowait online privileges
14

and by compress decimal else from if initial level mode null option public

any char connect default exclusive grant immediate insert like modify number or raw

Bazy danych

Robert Chwastek

rename rows smallint then update view

resource select start to user whenever

revoke session successful trigger validate where

row set synonym uid values with

rowid share sysdate union varchar

rownum size table unique vargraphic

 '    
          '               )1 '                                 ,           
    +/  + /   7E2 = 7 * 102 25e-03 = 25 * 10-3       )1 '        %     +5/     +$/ '  +5/           ,  5       +$/          , - 80  $   256K = 256 * 1024 1M = 1 * 1048576  1    ' %       3.3.2. Rozkaz CREATE TABLE       1  1  '                                                    
             
    



1  1  '        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:                                                 

15

Bazy danych

Robert Chwastek

      

                       


             9           
                            9       
                       
                      
           
       query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie '  &                                      $               
                  '           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

1          


    )
  
       DROP object_type [user.]object                   poszczeglnych typw obiektw:  DROP CLUSTER [user.]cluster [INCLUDING TABLES] - kasowanie            '  '                 
   &    '  '                         
  &                   
        DROP [PUBLIC] DATABASE LINK link       &                    DROP INDEX [user.]index - kasowanie indeksu.  DROP [PUBLIC] ROLLBACK SEGMENT segment - kasowanie segmentu        $     
               5   
        tylko administrator bazy danych.
16

Bazy danych

Robert Chwastek

 DROP SEQUENCE [user.]sequence - kasowanie sekwencji.  DROP [PUBLIC] SYNONYM [user.]synonym - usuwanie synonimu. Synonim                 
     
     
         DROP TABLE [user.]table                                                                          DROP TABLESPACE tablespace [INCLUDING CONTENTS] - usuwanie     1                 przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie       
    &    '  )                   DROP VIEW [user.]view                                
               3.3.4. Rozkaz INSERT 1                                                     INSERT INTO [user.]table [ (column [, column] ...) ] { VALUES (value [, value] ...) | query } Parametry:                                                                     &          ''    
               :         '                   #        )1 1 )1  )1 UPDATE. Opis: 1   1      '                                     5                     ''       
            )  '' &     '       '                          
17

Bazy danych

Robert Chwastek

       
                                   #                     
                  
          
                      ;                      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 1  '          

 DELETE [FROM] [user.]table [alias] [WHERE condition] Parametry:                  
               
          '                                                         5         
               1  ' Opis:    %                           

  Skasowanie wszystkich wierszy w tabeli pracownicy: DELETE FROM pracownicy ;             numerem 2: DELETE FROM ksiazki WHERE autor = 2 ;
18

     

Bazy danych

Robert Chwastek

3.3.6.

Rozkaz CREATE SEQUENCE

               
     
             
    
                      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:          :                          
      1 $  *       
       &        
                                       ,  1           
             $  '        $ '                                         '  $  '          
                         , 8 2   )$  '                 $ '           
               , 8                    )$ '                 * ' ) * '       ) * '                 
    
  %         
  
       
          * '  
                          
                       cykl generacji numerw.

19

Bazy danych

Robert Chwastek

  )                                         


     5  )                 ,           MAXVALUE - MINVALUE.  )1 1 ))1 1    )1 1
       
                   
  5  ))1 1     5
                        #                   do generacji kluczy pierwotnych. Opis:    
    
                                          '                   
        
 
                    &                         
                                                          
                      '  11 '       '    
                  sequence.NEXTVAL
 :             11 '                      11 '         '          
       sequence.CURRVAL
 :               '  11 ' 
       '     '                1              '  11 '    podzapytaniach                  z klauzulami ORDER BY, GROUP BY i HAVING w rozkazie SELECT  z operatorem ustawienia (UNION, INTERSECT, MINUS)

20

Bazy danych

Robert Chwastek

  CREATE SEQUENCE eseq INCREMENT BY 10 ; INSERT INTO pracownicy VALUES (eseq.NEXTVAL, Jan, Kowalski, 3) ; 3.3.7. Rozkaz SELECT

1  '                     $               


                                  '           (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:  ''                      '                                                           '                        pokazane.                                      9                            
                               
      miejscu zapytania.                 &                           SELECT).

21

Bazy danych

Robert Chwastek

 9                                                    
                                                                     SELECT, a nie na nazwie.                                               1)$  )      )1 '                                     
    Opis:                                                                                    '   )1 '        %                         '              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         

1                


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

Bazy danych

Robert Chwastek

lub UPDATE [user.]table [alias] SET (column [, column] ...) = (query) [, column [, column] ...) = (query) ] ... [ WHERE condition ] Parametry:                                      rozkazu.                                                 :     '     )1 1 *  )1                           1  '             Opis: 5                         5   1                        &    1               1     
           1       %             +4/           
            &                      
       5       
          &              4 :                   '' #             &          
   
     
      UPDATE pracownicy  
   
 ; 3.3.9. Rozkaz RENAME

1  1 $            #               

23

Bazy danych

Robert Chwastek

 RENAME old TO new Parametry: old - aktualna nazwa tabeli, widoku lub synonimu              Opis:                            #    
           #                    1  ' 1) '  1 $      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

1                   dodaje kolumny i warunki  modyfikuje definicje kolumn jak typy i warunki  usuwa warunki                      5                       ' 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:              &                         

24

Bazy danych

Robert Chwastek

  3$) *  9               


               9      
       1)          
    5                           /        wykonywania rozkazu ALTER TABLE. Opis: &                      
        ''                 )  ''         wierszy. 5  $) *                 rozmiar  typ danych  NOT NULL #             lko wtedy, gdy wszystkie        '' $     
  )  ''          
         &    jest rozmiar kolumny zadeklarowanej jako NOT NULL i w klauzuli MODIFY nie poda  )  ''           )  ''                     '  1)$                           ALTER TABLE pracownicy ADD (placa NUMBER(7, 2)) ; ALTER TABLE pracownicy MODIFY (placa NUMBER(9, 2)) ; 3.3.11. Rozkaz CREATE INDEX                             

1                                                         danej tabeli lub administrator (DBA).

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


25

Bazy danych

Robert Chwastek

CLUSTER cluster} [INITTRANS n] [MAXTRANS n] [TABLESPACE tablespace] [STORAGE storage] [PCTFREE n] [NOSORT] Parametry:        
                          )1 ' /                                   
           
 
      
                      column - nazwa kolumny w tabeli.           )1 '                           '  1          
        ) )1    )1 ' /                                 indeksu. Opis:                     
                              
                         
                    
            0   Jeden element              
                       
       
         &                            do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie                      pojedynczej kolumny B lub C. $                                                      CREATE INDEX i_prac_imie ON pracownicy (imie) ;
26

Bazy danych

Robert Chwastek

3.3.12.

Rozkaz CREATE VIEW

1            


                            co najmniej uprawnienia SELECT lub administrator.  CREATE VIEW [user.]view [(alias [, alias] ...)] AS query [ WITH CHECK OPTION [CONSTRAINT constraint] ] Parametry:        
     view - nazwa tworzonego widoku  :                   #           '        )1 1 * ani FOR UPDATE.     5 )  )                           
              5     5 )  )               ) 1              5 )  ) 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.          '                              gdy zapytanie na ktrym bazuje widok zawiera:      klauzule GROUP BY, CONNECT BY lub START WITH                       try posiada pseudokolumny            

$                 

             
         
                                                     
27

Bazy danych

Robert Chwastek

                       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] 1  )$$   )$$  )15       


  a  %                    bazie danych. 3.3.14. Rozkaz ROLLBACK Opis:

 ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ] Parametry:  )15                       )             1)'' 5  savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji. Opis: 1  1)'' 5            
       klauzuli TO) lub poczatku transakcji (bez klauzuli TO).   ROLLBACK ; ROLLBACK TO SAVEPOINT SP5 ; 3.3.15. Rozkaz SAVEPOINT

 SAVEPOINT savepoint
28

Bazy danych

Robert Chwastek

Parametry:  savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany rozkaz Opis: 1   )         1)'' 5     
                                     
                 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:  1  )'*    Opis:

                    1   )          


29

1          %       '  1   1        
  

Bazy danych

Robert Chwastek

3.4.

Operacje relacyjne

)  
                                                     warunki;                                              
    
      %    3.4.1. Selekcja Operacja                    )       podzbiorem poziomym.

  
                



    
   
  

 


  !  

  #



   

 "  " 

    '           '      1      SELECT * FROM osoby; spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie.            +  /   + )/    
     SELECT * FROM osoby       
  ;      
                                 
  )              
  )1         SELECT * FROM osoby       
        
  ;
30

Bazy danych

Robert Chwastek

  3.4.2.

 %  Projekcja



           

                      '         )       podzbiorem pionowym.

  
                



    
   
  

 


  !  

  #



   

 "  " 

 ' 


                  "  " 

                        


   '              )        
        '                              SELECT Pesel, Nazwisko FROM osoby       
        
 
31

Bazy danych

Robert Chwastek

; 3.4.3. Produkt

     %         )                             
                                            
           % 
     




 

 #       % 


              '                    
   SELECT * FROM R1, R2;  % 
        Operacja znajd                  3.4.4.    )  
                
                   

32

Bazy danych

Robert Chwastek

 
  


    

$
'

   !  
 

 









   


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

)  
               '                             3.4.5.1. Unia

                  %  


     
            
                                                                    SELECT imie, nazwisko FROM pracownicy UNION SELECT imie, nazwisko FROM wlasciciele ; 3.4.5.2. Przekrj          Prze     !            
                    
           bazowych.                                       
33

Bazy danych

Robert Chwastek

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

5  1) *         '           


      
                        )             
    %               
           
 Klauzu 1) *          
  
        SELECT stanowisko, avg(placa_podstawowa) FROM pracownicy GROUP BY stanowisko ;                 a grupy.    
        1 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 ; 5    
     
                
           
         ,,,             SELECT stanowisko, max(placa_podstawowa) FROM pracownicy
34

Bazy danych

Robert Chwastek

GROUP BY stanowisko HAVING max(placa_podstawowa) > 3000 ; 3.4.7.      


            '   
   

5          1. SELECT i WHERE 2. GROUP BY 3. HAVING 4. ORDER BY

3.5.

Podzapytania

#     ' 
  
      
              
            dwa rodzaje:  podzapytania proste (nazywane po prostu podzapytaniem) - podzapytanie jest wykonywane przed      

"                           

                1   '  &                             1      SELECT nazwisko FROM pracownicy WHERE placa_podstawowa = (SELECT min(placa_podstawowa) FROM pracownicy) ;             

     

&                        


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

35

Bazy danych

Robert Chwastek

'         


               operatora IN.             *  '' )  *                     )  ''                     *  ''                                                   , 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) ; #   
  
         
     %                   )1 1 *              
 "     
            
 
    

                    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) ;             %      %                            &                                           
                   (

36

Bazy danych

Robert Chwastek

3.6.

Widoki (perspektywy)

                                                                                      
              %                     # 
                      proste                '                                danych zawartych w widoku. Widok               
         %   '  
                          
                  
                     wszystkich systemach).             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 ;

37

Bazy danych

Robert Chwastek

3.7.

Transakcje

             )$$   1)'' 5                       


                                 
 )  
                           
            #                      &                    (      ( 1  )$$                 racji.     
                                        )$$   
          ) 
                  1  1)'' 5      )$$  &     %                      
 rozkazu COMMIT lub ROLLBACK. Rozkaz SAVEPOINT pozwala na zaznaczenie i nazwanie pewnego punktu               1)'' 5 )                 
                  1)'' 5 )   
             %     1)'' 5  COMMIT powoduje skasowanie wszystkich uprzednio zaznaczonych punktw. &            %    )$$   1)'' 5 &       %                           $                         skrypt.

3.8.
3.8.1.

Normalizacja relacji
Cele normalizacji

                    & 


                  &     
  
            
  
               !                        
                              
    !                          1           
38

Bazy danych

Robert Chwastek

 nazwa przedmiotu,  imie,  nazwisko,            


            ul. Krlewska 30/3 Krakw) &                                                    5         "                          redundancja danych;                                         
 "                            "                      
       
          &                                        ulica, nr_domu, nr_mieszkania    #         5     #   (            (        
      9   
(                                             
          
"                            #   ( #           "                                  "                   
    &                        
                         3.8.2.
  
  1                           
                                          
39

Bazy danych

Robert Chwastek

           postaci normalnej ilustruje rysunek:

   

  



 


   

                %
   %
 %&



 

 

 

 

    
  "         

    

 

  

 
  


   

  

 


   

                %
   %
 %&

    

        

     
    

    
     

    

    
  "         

    

3.8.3.

Definicje pomocnicze

                     postaci normalnej. Przed omwieniem procesu normalizacji konieczne jest jednak      
40

Bazy danych

Robert Chwastek

 Uniwersalny schemat relacji R = {A1, A2, ..., An              


      
  R = {A1, A2, ..., An} nazywamy zbir atrybutw S  R, ktry jednoznacznie identyfikuje wszystkie krotki relacji o schemacie R. Inaczej          1  
      1 i t2   t1[S] = t2[S].  Kluczem 5      1                 nie istnieje K  5               1 5              Klucz nazywamy kluczem prostym         
  jest zbiorem jednoelementowym; w przeciwnym wypadku mamy do czynienia z                   nazywamy kluczami potencjalnymi &                         potencjalnych nazywamy    
              #  (                                                 Atrybut relacji nazywamy podstawowym      
     relacji.  Atrybut relacji nazywamy wtrnym       
        Atrybut B relacji R jest                         identyfikuje B i oznacza A                          #                                                                                      
                        #  (       

41

Bazy danych

Robert Chwastek

  

                 %
   %
 %&
 Atrybut B jest        zbioru atrybutw X w schemacie R,   Y i nie istnieje podzbir X    /  Y.     
                                Zbir atrybutw Y jest           zbioru atrybutw X w    1   Y i istnieje podzbir X    /  Y.   *  #                    atrybutw Z jest 
                   #              *       *                               *       *         #      #  (       (     (                  (      (              (        (      (         ( 1         (             (  
                (          $         *                     1          1  dla dowolnej pary krotek t1 i t2      1[X] = t2[X], istnieje taka para krotek s1 i s2    s1[X] = s2[X] = t1[X] = t2[X] oraz s1[Y] = t1[Y] i s1[R-X-Y] = t2[R-X-Y] oraz s2[Y] = t2[Y] i s2[R-X-Y] = t1[R-X-Y].

42

Bazy danych

Robert Chwastek

           1 i t2                            1[x] = t2[X]),               *            sposb krotki s1 i s2        5  (      
 (  $
(        (&  (      (      (   &  ( & (      (           (       (         

 

 
 
  

$ 
$ 
$ 
$ 
           


  
      !  !  ! !      

!      !                


  
    
  
    
  
  

)      4      * 4         1-X-Y =      t1 4 5   


 &   t2 = (Kowalski, Magda, Systemy operacyjne) odpowiada para krotek s1 = (Kowalski, Agnieszka, Systemy operacyjne) s2 4 5   $
&       
                          
       

   wypadku jednoelementowego zbioru atrybutw (Dziecko) od jednoelementowego         #                                    
 zbioru atrybutw X
43

Bazy danych

Robert Chwastek

  *41             *    #      


     
       funkcjonalnymi.         1 4 1, A2, ..., An      
                   11, R2, ..., Rm schemat Ri z tego zbioru stanowi podzbir zbioru atrybutw (A1, ..., An) i




    (




 $         1 4 1, ..., An                1 11, ..., Rn        
         dekompozycja relacji r (o schemacie R) na relacje r1, ..., rn                     1, ..., rm. $                
               4  $            1 11, ..., Rm      atrybutw schematu R od klucza wtedy i tylko wtedy, gdy w dowolnej sekwencji   %                          
          
    1 3.8.4. 
  
  1   
                   
      
                        $       #  (   
           (    (    (      (            
      
        (   (         
                                        #  (            ( #   (   (     

     


   

             

  

    

   
  

  
   

44

Bazy danych

Robert Chwastek

 
   
   

  %
 %&

    

    

    

%

  %
   %

  

    
  "   

&         
              (     (                (   #   (             
     (   (                   
                kluczami prostymi.      relacji Zamwienia do drugiej postaci normalnej otrzymujemy            Dostawca na zamwieniu

45

Bazy danych

Robert Chwastek

  

              
 Zamwione dostawy

  

   %
 %&
   

  %
   %

3.8.5.


   
 

             


                 
      
              
      
                                                    

                          (     (    


46

Bazy danych

Robert Chwastek

  (              (     

  (            (     #  ( 

 


   

   

  

    

  
             

    

   
 

  
   
 

3.8.6.

 
  
 

        1                * #    1    Y  Z = R i podzbir Y jest nietrywialnie        Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w                *   
                <         (            funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej,       (   (               (                  atrybutami. &                                                                      
47

Bazy danych

Robert Chwastek

          (         (   (                  




 
 


$ 
$ 
     


    !  !   

 
 
  

$ 
$ 
    3.8.7.

!          
  
  

  
 

       1        wtedy i tylko wtedy,


                          1 11, ..., Rm           klucza.                                                                                                    
                                   3.8.8. Podsumowanie                                     
48

Bazy danych

Robert Chwastek

             %   


     $                      

                                             

49

Bazy danych

Robert Chwastek

4.

 
 
       

            

4.1.

Operatory
'    
 

                          4.1.1. Operatory arytmetyczne

)                   nego. Jednak       


                  
          Operator () Opis #         %                         Operatory jednoargumentowe zachowania i zmiany znaku. $  Dodawanie, odejmowanie
  SELECT (X+Y)/(Y+Z) ...

+, *, / +, -

... WHERE NR = -1 ... WHERE -PLACA < 0 SELECT 2*X+1 ... WHERE X > Y/2 SELECT 2*X+1 ... WHERE X > Y-Z

4.1.2.

Operatory znakowe

&         


    nkatenacji. 1    
    
             
   1  
     )
       
   
  
     operatora konkatenacji. Operator || 5 Opis   

  SELECT Nazwa: || ENAME ...

50

Bazy danych

Robert Chwastek

4.1.3.

Operatory porwnania

)                     %              


  1  '  Operator () = !=, ^=, <> > < >= <= IN Opis #         %       rwne           $       $    Rwny dowolnemu elementowi. Synonim do = ANY
  ... NOT (A=1 OR B=1) ... WHERE PLACA = 1000 ... WHERE PLACA != 1000 ... WHERE PLACA > 1000 ... WHERE PLACA < 1000 ... WHERE PLACA >= 1000 ... WHERE PLACA <= 1000 ... WHERE ZAWOD IN (URZEDNIK, INFORMATYK)

... WHERE PLACA IN (SELECT PLACA FROM PRAC WHERE WYDZIAL=30) 1    
    NOT IN ... WHERE PLACA NOT IN (SELECT    '  PLACA FROM PRAC WHERE dowolny element zbioru jest rwny WYDZIAL=30) NULL Synonim do != ALL       ... WHERE PLACA = ANY (SELECT ANY          PLACA FROM PRAC WHERE   $     WYDZIAL =30) jednym z operatorw: =, !=, >, <, =4 >4 # 1  przynajmniej jeden z elementw            ... WHERE (PLACA, PREMIA) >= ALL          ALL ((14900, 300), (3000, 0))   $     jednym z operatorw: =, !=, >, <, =4 >4 # 1           warunek.       ... WHERE A BETWEEN 1 AND 9 [NOT] BETWEEN mniejszy lub rwny y.
51

Bazy danych

Robert Chwastek

x AND y [NOT] EXISTS

# 1      ... WHERE EXISTS (SELECT PLACA zwraca przynajmniej jeden wiersz. FROM PRAC WHERE WYDZIAL = 30)        ... WHERE STAN LIKE T% [NOT] '  +?/     LIKE     
 
  ,      jest rwny NULL. Litera _           IS [NOT] [Nie] jest rwne NULL. ... WHERE ZAWOD IS NULL NULL )  )    '         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           
      ''   ''  
    
  
      '' 4.1.4. Operatory logiczne    
 
 )   
          %    
            Operator () NOT



AND

OR

Opis
  #     SELECT ... WHERE x = y AND (a = b     % OR p = q) #       ... WHERE NOT (zawod IS NULL) gicznego WHERE NOT (A=1) Logiczne i. Wynik jest rwny ... WHERE A = 1 AND B = 2 1          1 Logiczne lub. Wynike jest rwny ... WHERE A = 1 OR B = 3 1      
52

Bazy danych

Robert Chwastek

jednego TRUE    AND true false null OR true false null 4.1.5. true true false null true true true true

operandu

jest

rwna    )1  

   

     

false false false false false true false null

null null false null null true null null


 
   Operatory zbiorowe       %    

Operator UNION

INTERSECT

MINUS

Opis
     <  ... SELECT ...            UNION SELECT ...            ... SELECT ...           INTERSECT SELECT ... tylko raz )       ... SELECT ...           MINUS SELECT ...                
           tylko raz

4.2.

 

   
                         
         operandw.               numeryczny: 2 * 2  znakowy: TO_CHAR(TRUNC(SYSDATE + 7))
53

Bazy danych

Robert Chwastek

       


      SET Nazwisko = LOWER(Nazwisko)      %           [table.] { column | ROWID } text number sequence.CURRVAL sequence.NEXTVAL NULL ROWNUM LEVEL SYSDATE UID USER

    

  pracownicy.nazwisko      ! 10 SYSDATE                  : { n | variable } [ :ind_variable ]   :nazwisko_pracownika:nazwisko_pracownika_indykator " #          function_name( [DISTINCT | ALL] expr [, expr] ... )   LENGTH(Kowalski) ROUND(1234.567*82)      %        (expr) +expr, -expr, PRIOR expr expr * expr, expr / expr expr + expr, expr - expr, expr || expr   (Kowalski: || Nauczyciel) LENGTH(Nowak) * 57 SQRT(144) + 72    %     (expr [, expr], ...)
54

Bazy danych

Robert Chwastek

  (Kowalski, Nowak, Burzynski) (10, 20, 40) (LENGTH(Kowalski) * 5, -SQRT(144) + 77, 59)            '  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

      
 
     %    
              1  '    
                    <expr> <comparison operator> <expr> <expr> <comparison operator> <query> <expr-list> <equal-or-not> <expr-list> <expr-list> <equal-or-not> <query>  porwnanie 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>         '' <expr> IS [NOT] NULL                
55

Bazy danych

Robert Chwastek

EXISTS <query>  kombinacja innych warunkw (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

56

Bazy danych

Robert Chwastek

5.
5.1.
ABS(n) CEIL(n) FLOOR(n) MOD(m, n)

  

  
 

Funkcje numeryczne
 
  # ABS(-15) Wynik: 15 #         CEIL(15.7)      Wynik: 16 #          FLOOR(15.7)     Wynik: 15 #          MOD(7, 5) Wynik: 2 #      
  POWER(2, 3) '       " Wynik: 8          #      
   ROUND(16.167, 1)      &      Wynik: 16.2     , '           
  ROUND(16, 167, -1) odpowiedniej liczby cyfr przed Wynik: 20 przecinkiem) # ,     ,    SIGN(-15)    ,      Wynik: -1 od 0 Zwraca pierwiastek kwadratowy liczby n. SQRT(25) & =,     Wynik: 5 #        TRUNC(15.79, 1)     &       Wynik: 15.7     , &                  TRUNC(15.79, -1) Wynik: 10 Przeznaczenie       

POWER(m, n)

ROUND(n[, m])

SIGN(n)

SQRT(n) TRUNC(m[, n])

5.2.
CHR(n)

Funkcje znakowe
  Przeznaczenie Zwraca znak o podanym kodzie
  CHR(65) Wynik: A

57

Bazy danych

Robert Chwastek

INITCAP(string)

#  
    

LOWER(string)

LPAD(string1, n [, string2])

LTRIM(string [, zbir])

REPLACE(string, search [, replace])

RPAD(string1, n [, string2])

RTRIM(string [, zbir])

SOUNDEX(string)

SUBSTR(string, m [, n])

      INITCAP(PAN JAN     NOWAK) Wynik: Pan Jan Nowak Zamienia wszystkie litery w podanym LOWER(PAN JAN  
   NOWAK) Wynik: pan jan nowak #  
   
  LPAD(Ala ma , kota*,     
   17)  
 &  
     Wynik:        &   kota*kota*Ala ma   
   
 zwracane jest n pierwszych znakw z tekstu string1. Usuwa litery z tekstu string od lewej LTRIM(xxxXxxOstatn               / + /          &    Wynik:          
)    ( pusty. #  
     REPLACE(Jack &          Jue, J, Bl) replace. Wynik: Black & Blue #  
  RPAD(Ala ma , 17,     
   
 kota*)  
&  
     Wynik:       &   Ala ma kota*kota*   
   
 zwracane jest n pierwszych znakw z tekstu string1. #  
       RTRIM(Ostatnie          
    / + /   &        Wynik:      
  )     ( # 
     SELECT nazwisko        FROM bibl WHERE  
  )    SOUNDEX (nazwisko)       = SOUNDEX       ('Mickiewicz'); wymawianych tak samo. #  
 
   
SUBSTR(ABCDE,2,           
  3)  &         Wynik:
58

Bazy danych

Robert Chwastek

TRANSLATE( string, from, to)

  
     
  
   
   1. #  
       wszystkich znakw from na znak to.

BCD

UPPER(string)

#       
  
    

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

LENGTH(string)

Zwraca kod ASCII pierwszej litery w   


  #    
    
 
          &            &            # 
  
 
 

TRANSLATE( HELLO! THERE!, !, -) Wynik: HELLO- THERE- UPPER( Jan Nowak) Wynik: JAN NOWAK ASCII(A) Wynik: 65 INSTR( MISSISSIPPI, S, 5, 2) Wynik: 7

LENGTH(Nowak) Wynik: 5

5.3.

Funkcje grupowe

 
           
                   
 5  1) *    '            
 5       
         
      pomijane). Klauzula ALL powoduje wybranie wszystkich wierszy wynikowych do                       ''    )      
     
   1  $ 1     AVG( [DISTINCT | ALL] num) COUNT( [DISTINCT | ALL] expr) COUNT(*) Przeznaczenie #     
      #     ktrych expr nie jest rwne NULL #               
59


  SELECT AVG(placa) Srednia FROM pracownicy SELECT COUNT(nazwisko) Liczba FROM pracownicy SELECT COUNT(*) Wszystko FROM pracownicy

Bazy danych

Robert Chwastek

MAX( [DISTINCT | ALL] expr) MIN( [DISTINCT | ALL] expr) STDDEV( [DISTINCT | ALL] num) SUM( [DISTINCT | ALL] num)

NULL #      #      Zwraca odchylenie        


     '' #    

     VARIANCE( [DISTINCT | #  
    ALL] num) NULL

SELECT MAX(Placa) Max FROM pracownicy SELECT MIN(Placa) Min FROM pracownicy SELECT STDDEV(Placa) Odchylenie FROM pracownicy SELECT SUM(Placa) Koszty osobowe FROM pracownicy SELECT VARIANCE(Placa) Wariancja FROM pracownicy

5.4.

Funkcje konwersji

              
    
  )
             
   
    typTOtyp. Pierwszy typ jest typem, z ktrego wykonywana jest konwersja, drugi jest typem wynikowym.   CHARTOROWID (string) Przeznaczenie      
 znakw na ROWID
  SELECT nazwisko FROM pracownicy WHERE ROWID = CHARTOROWID (0000000F.0003.0002) SELECT CONVERT (New WORD, US7ASCII, WE8HP) Conversion FROM DUAL

           implementacjami zestawu znakw. Zestawem    8 HEXTORAW (string) 5   
                      1     ROWTOHEX(raw)        cyfry szesnastkowe        liczbie.        ROWIDTOCHAR CONVERT(string [,dest_char_set [,source_char_set ] ])
60

INSERT INTO GRAPHICS (RAW_COLUMN) SELECT HEXTORAW (7D) FROM DUAL SELECT RAWTOHEX (RAW_COLUMN) Graphics FROM GRAPHICS

SELECT ROWID FROM

Bazy danych

Robert Chwastek

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

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

wiersza na tekst. Wynik      


 18 znakw. 5                
 
   
 & 
                        5         
  

GRAPHICS WHERE ROWIDTOCHAR(ROWID) LIKE %F38% SELECT TO_CHAR(17145, $099,999) Char FROM DUAL

  
       
       podanego tekstu. Do         
         DD-MON-YY TO_NUMBER (string)                 TO_DATE(string [, fmt])

SELECT TO_CHAR(HIREDATE, Month DD, YYYY) New date format FROM EMP WHERE ENAME = SMITH INSERT INTO BONUS (BONUS_DATE) SELECT TO_DATE (January 15, 1989, Month dd, YYYY) FROM DUAL

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

5.5.

Funkcje operacji na datach


Przeznaczenie
  #   SELECT ADD_MONTHS         (HIREDATE, 12)    '    Next year ujemna FROM EMP WHERE ENAME = SMITH #     SELECT LAST_DAY      (SYSDATE) Last
61

  ADD_MONTHS (date, n)

LAST_DAY(date)

Bazy danych

Robert Chwastek

MONTHS_BETWEE N (date1, date2)

NEW_TIME(date, a, b)

NEXT_DAY(date, string)

ROUND(date [, fmt])

SYSDATE

podanej dacie. #                                


 31 dni. #                                
    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 #  
  tygodnia podanego w string,    !     
        #   
       
           % #      Nie wymaga podania argumentw.
62

FROM DUAL SELECT MONTHS_BETWEEN (02-feb-86, 01-jan-86)) Months FROM DUAL

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

SELECT NEXT_DAY( 17-MAR-89, TUESDAY) NEXT DAY FROM DUAL SELECT ROUND ( TO_DATE( 27-OCT-88), YEAR) FIRST OF THE YEAR FROM DUAL SELECT SYSDATE FROM DUAL

Bazy danych

Robert Chwastek

TRUNC(date [, fmt])

#     jednostki podanej w fmt.     %  usuwana jest informacja o czasie.

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

   1)   1         


     CC, SCC SYYY, YYYY, YEAR, SYEAR, YYY, YY, Y Q MONTH, MON, MM WW W DDD, DD, J DAY, DY, D HH, HH12, HH24 MI

     

wiek    
    ,8   

   

   %      %  %      godzina minuta  0 
 

    0

5.6.

Inne funkcje

  SELECT GREATEST (Harry, Harriot, Harold) GREATEST FROM DUAL

Przeznaczenie   GREATEST(expr [, #                expr] ...)     

  konwertowane do typu  
     wykonaniem porwnania. #       LEAST(expr [,       expr] ...)     

  konwertowane do typu  
     wykonaniem porwnania.   ''  NVL (expr1, expr2) &    zwraca expr2, w przeciwnym wypadku zwraca expr1.

SELECT LEAST (Harry, Harriot, Harold) LEAST FROM DUAL

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

63

Bazy danych

Robert Chwastek

UID

USER

Zwraca unikalny identyfikator       


   #     

SELECT USER, UID FROM DUAL SELECT USER, UID FROM DUAL

5.7.

Formaty zapisu danych

                           "                        )9 1  )9  5.7.1. Formaty numeryczne                )9 1                        
      
            &                             
   + /                    numerycznego: Element 9 0 $ B MI PR , (przecinek) . (kropka) V E DATE 5.7.2.   9999 0999 $9999 B9999 9999MI 9999PR 9,999 99.99 999V99 9.999EEEE DATE Formaty dat Opis '  +./                      +6/                 ++                  +=/ >                     $    ,n
         po V                         Dla dat przechowywanych w postaci numerycznej.      +$$3 3**/

       )9 1      $


       )9           Format standardowy, to DD-MON-YY.
64

Bazy danych

Robert Chwastek

Elementy formatu dat przedstawia tabela: Element SCC lub CC YYYY lub SYYYY YYY, YY lub Y Y,YYY SYEAR lub YEAR BC lub AD B.C. lub A.D Q MM MONTH MON WW W DDD DD D DAY DY AM lub PM A.M. lub P.M. HH lub HH12 HH24 MI SS SSSS / ., ... Opis  " + /             ++        + /             - Ostatnie 3, 2 lub 1 cyfra roku Rok z przecinkiem na podanej pozycji Rok przeliterowany. S powoduje poprzedzenie daty przed       ++ #  3      3    Znak BC/AD z kropkami 5       $ ,          .                   %        %         i trwa 7 dni)  %       %         8  %    00 %     % 
   8        .        Trzyliterowy skrt nazwy dnia  !     !       Godzina (1-12) Godzina (1-24) Minuta (0-59) Sekunda (0-59)        ,-0.. Znaki przestankowe umieszczane w wyniku 
      

   
          $   $ (        3               liczb zerami;                         TH dla liczby 4;                            

65

Bazy danych

Robert Chwastek

6.
6.1.

Programowanie proceduralne - PL/SQL


Wprowadzenie

1    '                   


       
              
  )                     '         '3 '          
 ' PL/SQL pozwala wykorz            ' 1 1   1 $    niektre rozkazy kontroli danych jak CONNECT, GRANT i REVOKE. 5    '3 '         
 '  z  %      $              '   '              
     5     '3 ' %       PL/SQL pozwala na definiowa   #             %    %    !
     &                  5                  '/ #                 premia NUMBER(7, 2);                  4(  podatek := cena * stopa; 
             '             SELECT placa INTO placa_aktualna FROM pracownicy WHERE nazwisko = Nowak ; '3 '                    pola.                                   )                              stopa_premii CONSTANT NUMBER(3, 2) := 0.10;           &              $       ?*            #                                           
 tytul books.tytul%TYPE $                
                 ?1)*
66

Bazy danych

Robert Chwastek

 '3 '             % 4 74 = > >4 =4 $


              
           

6.2.

Struktura bloku
5   '3 '              

DECLARE deklaracje BEGIN rozkazy wykonywalne EXCEPTION   


      END; 5             
  
   '3 '           
                           
  
          $                  )                         
 #                
    
              
                  
   
                
  
                   %   
       
 
           
         
                       
          
    

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]
67

Bazy danych

Robert Chwastek

)    
        
 %                      
  
       1) 1  %                                                     %                                                       '1             )          '3 '                               
        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; #                                 1  1 FUNCTION name [ (argument [, argument] ... ) ] RETURN datatype IS [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name];                  1  1 1  1  1     %                    
                  1  1       
          
 &    %     1  1  '3 ' 
                  1  1      
  

6.4.

Kursory

W celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany                              '3 '       %                        
    '3 '  dwch typw kursorw:
68

Bazy danych

Robert Chwastek

 

                 %                            )1"     '3 '              operacji. &                                   5             '3 '     
                   DECLARE  $   %     FROM pracownicy    &'  ... BEGIN ...             
      
        
       )      sposb: OPEN prac_kursor;        
                  5         
         
   1             FETCH prac_kursor INTO prac_nazw, prac_wydz;   %                            
   ')  CLOSE prac_kursor; 5                  
              +?/             #              ?) )   1         %       powodu braku wierszy  ? )   1         %      %ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora)  ? )   1                      rsora: LOOP FETCH prac_kursor INTO prac_nazw, prac_wydz; IF prac_kursor%ROWCOUNT > 10 THEN     # ... EXIT WHEN prac_kursor%NOTFOUND; ... END LOOP;
69

Bazy danych

Robert Chwastek

6.5.

Rekordy

    '3 '            


      5               1                      
     '3 '                wierszom w tabeli, widoku lub kursorze, nie pozwala jednak na definiowanie typw poszczeglnych pl.                 &                                     
           %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; 1           DECLARE prac_rek pracownicy%ROWTYPE; ... BEGIN ... END;                  
              nazwa_rekordu.nazwa_pola;        
            
      9      suma := suma + prac_rek.placa; $                                       
               
                          + 4/             "
   #             prac_rek.nazwisko := UPPER(prac_rek.nazwisko);      
  e jest na dwa sposoby:         
     

               
  
    "
70

Bazy danych

Robert Chwastek

    

        '      

 ) 

  )

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; '3 '          )1           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

         
                                                                
           
        (    
      %      
        22 & '3 '           
 &                 
                           
                                           
  )    (     (     '3 '                 '3 '
71

Bazy danych

Robert Chwastek

              (                                  
                    

   
 
      

        
                                         1              
   %              
 
                    
        &                    
  
           ( # 1)9    
   
      !
   3# DECLARE cz_wsk NUMBER(3,1); BEGIN ... SELECT cena / zysk FROM akcje    
 (  #      -- 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;  
        #                           
         
   
    
            
   BEGIN SELECT ...    )   *+ SELECT ...    )   *+ SELECT ...    )   *+ END;
72

Bazy danych

Robert Chwastek

     
             
            
       
                             BEGIN SELECT ... SELECT ... SELECT ... EXCEPTION WHEN NO_DATA_FOUND THEN  ,    * !)   *+ END;             
      
    #              &                         
         
         6.6.2.  
         '3 '                                                          1 )19'1  *9)                 otwartego;  9 '9)9                  1                w indeksie zadeklarowanym jako UNIQUE;   ' 9 1 )1                 
 kursora (np. nie otwartego);   ' 9 $ 1                   numerycznego z tekstu, ktry nie reprezentuje liczby;  )9 9 )        
   '             
  '  )"  )1 9 11)1                       "  ))9$*91)        
   '                    '  )"  ' 9 11)1                   lub pola;  ZERO_DIVIDE - prba dzielenia przez zero; 6.6.3.             (              
 
      
      '3 '             )       %    5   
73

Bazy danych

Robert Chwastek

  
                             
             
      
   %                       )      ) 1                  
            )      ) 
     EXCEPTION WHEN ... THEN     WHEN ... THEN     WHEN ... THEN     WHEN OTHERS THEN     END;

* !

&                                  )1 WHEN over_limit OR under_limit OR VALUE_ERROR THEN ...        ) 1      ) 1                
                 
         
         
              
     6.6.4.       
     &  '3 '                                                   1                               )               DECLARE overflow EXCEPTION; result NUMBER(5); BEGIN ... END;     
      '3 '          %                                                          rozkazach SQL.
74

Bazy danych

Robert Chwastek

      


  
         $             Jak podano w                                     
      
   1   
       DECLARE brak_czesci EXCEPTION; liczba_czesci NUMBER(4); BEGIN ... IF liczba_czesci < 1 THEN RAISE brak_czesci; END IF; ... EXCEPTION WHEN brak_czesci THEN    )   + END; $            1            RAISE INVALID_NUMBER;         
        
   
     
      
             
   
                        1     
          
     
 
               
              
 
               
                  
   
    

6.7.
6.7.1.

 

 
Rozkaz OPEN

Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem                   5                  OPEN cursor_name [(input_parameter [, input_parameter] ... )] ; Parametry:  cursor_name - nazwa kursora uprzednio zadeklarowanego, ktry nie jest aktualnie otwarty.   9        '3 '          &                         klauzuli WHERE).
75

Bazy danych

Robert Chwastek

    )  
       
                      )                   )                    
     celu pobrania ich z kursora.             )                                                            )                               
       
                         
    +4>/              DECLARE CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS ... BEGIN OPEN prac_kur(Kowalski, 10); ... OPEN prac_kur(wydz => 15, nazw => Nowak); END; $                                                           6.7.2. Rozkaz CLOSE

1  ')          


   5                1  ')              
    CLOSE cursor_name ; Parametry:  cursor_name - nazwa aktualnie otwartego kursora. 6.7.3. Rozkaz FETCH 1             
             '     )              #           kolumn w aktualnym wierszu.  FETCH cursor_name INTO { record_name | variable_name [, variable_name] ... } ; Parametry:
76

Bazy danych

Robert Chwastek

 cursor_name - nazwa aktualnie otwartego kursora.   9                                                                                 9                       %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       '3 '      '   '        )             '                          
           '     ) 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 rozkazw.  IF plsql_condition THEN seq_of_statements [ELSEIF plsql_condition THEN seq_of_statements] ... [ELSE seq_of_statements] END IF; Parametry:  :9                
 
77

Bazy danych

Robert Chwastek

 :9 9     
              !      
   Opis: 1                      &              
              
 ' '                  
            
              ' &           
                    %  &                   ' &               
    '             ''        
    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

1  '))           ' 3 '                        '    )1        )1     [<<label_name>>] [ { WHILE plsql_condition } | { FOR {numeric_loop_param | cursor_loop_param } } ] LOOP seq_of_statements END LOOP [ label_name ] ;     99  index IN [REVERSE] integer_expr .. integer_expr    99 record_name IN { cursor_name [(parameter [, parameter] ...)] | ( select_statement ) }

78

Bazy danych

Robert Chwastek

Parametry:   9                 $                                                                    label_name.index  :9 9     
          :9        ' 3 '     '               )    
         
    1                                    )1            
 9     
                           )1  1 1                     9            
            )1                                    parametrami).   9                       ' 3 '                     
 Opis:                       
         %               <<loop1>> LOOP ... IF (x > 10) THEN EXIT loop1; ... END LOOP loop1;   '     
                           
            
           WHILE x < 10 LOOP ... x := x - y; ... END LOOP;  )1       
                                               FOR i IN 1 .. n LOOP silnia := silnia * n;
79

Bazy danych

Robert Chwastek

END LOOP;  )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

1           1               EXIT [label_name] [WHEN plsql_condition] ; Parametry:   9                 &                    
      wykonywanej.  :9              $        ' 3 '         
          1 6.7.8. Rozkaz GOTO 1  ))      hmiastowego przekazania sterowania od rozkazu  
   
     
                << label_name >>    )) GOTO label_name ; Opis: 1  ))           
                    
   #     
             
       
                   &   ))         )1           automatycznie.

80

Bazy danych

Robert Chwastek

7.

Literatura

1. Wojciech Cellary, Zbyszko Krlikowski Wprowadzenie do projektowania baz danych dBase III, Wydawnictwa Naukowo -Techniczne, Warszawa 1988 2. ORACLE SQL Language Reference Manual 3. ORACLE PL/SQL Users Guide and Reference 4. ORACLE SQL*Plus Users Guide and Reference

81

You might also like