Użycie SQL Oracle opiera się na skonfigurowaniu serwera bazodanowego1 to zostało już za nas zrobione przez służby techniczne UŚ. Utworzenia połączenia pomiędzy serwerem, a naszą aplikacją narzędziową 2zagadnienie omówione w temacie: sql-wedlug-oracle. Wysłaniu do serwera sekwencji rozkazów charakteryzujących nasze potrzeby i otrzymaniu odpowiedzi serwera 3zagadnienie omówione w temacie: sql-wedlug-oracle.

Jest rzeczą logiczną, że aby pracować na bazie danych… musimy wpierw ją stworzyć. Ta czynność opiera się na poleceniu należącym do kategorii DDL4Data Definition language czyli CREATE.

Ćwiczenie 1: Utwórz tabelę o nazwie FIRMA zawierającą kolumny: ID_PRACOWNIKA klucz główny typ numeric, IMIE char(30), NAZWISKO char(60), STANOWISKO char(60), ZAROBEK numeric, DZIAL char(30)

  • hasło dostępowe to: exp1

Restricted Content
To view this protected content, enter the password below:

Mając już stworzoną tabelę w naszej bazie danych dodajmy pierwsze wpisy używając polecenia kategorii DML5Data Modification Language

Ćwiczenie 2: Wypełnij pierwszy wiersz tabeli korzystając z danych: id:7369 prezes Stanisław Kowalski 10800 nie wstawiając żadnej wartości w pole DZIAL.

Restricted Content
To view this protected content, enter the password below:

Zdając sobie sprawę z faktu, że nie umieściliśmy wszystkich koniecznych kolumn w naszej tabeli wróćmy do jej definicji i ją zmodyfikujmy dodając kolumnę za pomocą polecenia z kategorii DDL.

Ćwiczenie 3: Dodaj do tabeli FIRMA kolumnę MIASTO char(30)

ALTER TABLE "FIRMA" ADD MIASTO char(30);
ALTER TABLE "FIRMA" ADD MIASTO char(30) CONSTRAINT ID_PRACOWNIKA UNIQUE; 

Qracle SQL nie posiada mechanizmu znanego np. z MySQL umożliwiającego wstawienie kolumny na wskazanej pozycji. Dodawana kolumna umieszczana jest na końcu. Drugi zapis ustawia powiązanie (przypisanie) z polem będącym zdefiniowanym identyfikatorem (tu użyto przykładowo: ID_PRACOWNIKA).

Wiedząc, że wpisaliśmy już nasze pierwsze dane do tablicy wyświetlmy je korzystając z polecenia kategorii DQL6Data Query Language.

Ćwiczenie 4: Wyświetl zawartość tabeli FIRMA.

SELECT * FROM "FIRMA";

Ćwiczenie 5: Wypełnij wartość w kolumnie DZIAL wstawiając KADRY dla wiersza w którym ID_PRACOWNIKA=7369

UPDATE "FIRMA" SET DZIAŁ='KADRY' WHERE ID_PRACOWNIKA=7369;

Ćwiczenie 6. Zmień nazwę kolumny MIASTO na LOKALIZACJA

ALTER TABLE "FIRMA" RENAME COLUMN MIASTO TO LOKALIZACJA;

Ćwiczenie 7. Zmień typ danych w kolumnie ZAROBEK z integer na float

ALTER TABLE "FIRMA" MODIFY ZAROBEK float;

lub w zapisie blokowym:

ALTER TABLE "FIRMA" MODIFY ( ZAROBEK float );

Próba zmiany typu nie dającego się konwertować bezpośrednio np. Varchar2 na Number lub z typu liczbowego na typ liczbowy o mniejszej precyzji nie powiedzie się generując błąd jeśli w tabeli na pozycji tej kolumny znajdują się już dane. Konwersji podlegają jedynie zgodne typy danych lub kolumna musi być pusta.

Ćwiczenie 8. Usuń kolumny LOKALIZACJA i DZIAL

ALTER TABLE "FIRMA" DROP COLUMN LOKALIZACJA;
ALTER TABLE "FIRMA" DROP COLUMN DZIAL;

lub jednocześnie:

ALTER TABLE "FIRMA" DROP ( LOKALIZACJA, DZIAL );

Zapis blokowy powyżej umożliwia modyfikację wielu elementów w jednym poleceniu SQL. Należy jednak zwrócić uwagę na delikatną różnicę w składni.

Ćwiczenie 9. Do tabeli FIRMA wstaw kolumnę NR_DZIALU integer

ALTER TABLE "FIRMA" ADD NR_DZIALU integer;

Ćwiczenie 10. Wstaw wartość 20 w kolumnie NR_DZIALU, dla wiersza w którym ID_PRACOWNIKA=7369

UPDATE "FIRMA" SET NR_DZIALU=20 where id_pracownika=7369;

Ćwiczenie 11. Utwórz tabelę DZIAL zawierającą kolumny: NR_DZIALU – klucz główny integer, oraz NAZWA_DZIALU char(50), LOKALIZACJA char(50)

CREATE TABLE DZIAL(
 NR_DZIALU integer NOT NULL, 
 NAZWA_DZIALU CHAR(50), 
 LOKALIZACJA CHAR(60),
 CONSTRAINT DZIAL_PK PRIMARY KEY ( NR_DZIALU ) ENABLE 
);

Ćwiczenie 12. Usuń wszystkie wiersze z tabeli FIRMA

DELETE FROM "FIRMA";

Ćwiczenie 13. Zmień nazwę tabeli FIRMA na PRACOWNICY

RENAME "FIRMA" TO "PRACOWNICY";

Ćwiczenie 14. Dodaj do tabeli Pracownicy powiązanie z tabelą DZIAL w postaci klucza obcego

ALTER TABLE "PRACOWNICY" ADD CONSTRAINT fk_dzial FOREIGN KEY (NR_DZIALU) REFERENCES DZIAL (NR_DZIALU);

Ćwiczenie 15. Wypełnij tabele DZIAL

INSERT INTO "DZIAL" VALUES(10,'KSIEGOWOŚĆ','KATOWICE');
INSERT INTO "DZIAL" VALUES(20,'BADANIA','WARSZAWA');
INSERT INTO "DZIAL" VALUES(30,'SPRZEDAŻ','POZNAŃ');
INSERT INTO "DZIAL" VALUES(40,'OPERACJE','GDAŃSK');

Ćwiczenie 16. Wyświetl zawartość tabeli DZIAL

SELECT * FROM "DZIAL";

Ćwiczenie 17. Wypełnij tabele PRACOWNICY

Z uwagi, gdy nie wypełniamy wartościami wszystkich kolumn tabeli “PRACOWNICY” łatwiej nam będzie skorzystać z poniższej formy polecenia INSERT. Pozwala nam to też zachować własną kolejność wymienianych atrybutów.

INSERT INTO "PRACOWNICY" (ID_PRACOWNIKA,IMIE,NAZWISKO,STANOWISKO,ZAROBEK,NR_DZIALU) VALUES (7369,'MARCIN','SMITKO','URZĘDNIK',800,20);
INSERT INTO "PRACOWNICY" (ID_PRACOWNIKA,IMIE,NAZWISKO,STANOWISKO,ZAROBEK,NR_DZIALU) VALUES (7499,'WOJTEK','ALLEN','SPRZEDAWCA',1600,30);
INSERT INTO "PRACOWNICY" (ID_PRACOWNIKA,IMIE,NAZWISKO,STANOWISKO,ZAROBEK,NR_DZIALU) VALUES (7521,'ŁUKASZ','WARD','SPRZEDAWCA',1250,30);
INSERT INTO "PRACOWNICY" (ID_PRACOWNIKA,IMIE,NAZWISKO,STANOWISKO,ZAROBEK,NR_DZIALU) VALUES (7566,'DAMIAN','JONAS','KIEROWNIK',2975,20);
...

W przeciwnym wypadku musimy użyć listy wartości atrybutów zgodnej z kolejnością kolumn w tabeli. Kolejność tę można zawsze sobie przypomnieć za pomocą poniższego polecenia.

DESCRIBE "PRACOWNICY";

Ćwiczenie 18. Wyświetl zawartość tabeli PRACOWNICY

SELECT * FROM "PRACOWNICY";

Uzupełnienie danych: Po przeprowadzeniu wyżej wymienionych ćwiczeń utrwalmy je realizując zadanie utworzenia struktur analogicznych do przedstawionych poniżej danych.