sobota, 6 listopada 2010

Kurs Oracle SQL . SQL*Plus

SQL*Plus

SQL*Plus – podstawowe polecenia
Językiem który umożliwia zarządzaniem bazą danych jest język SQL (Structured Query Language).
Wszystkie narzędzia dostępne na rynku służące do graficznego zarządzania bazą I umożliwiające “wyklikanie” zapytania są jedynie nakładką na ten język.
SQL*Plus jest podstawowym narzędziem Oracle służącym do komunikacji z bazą danych. Umożliwia wykonywanie zapytań do bazy I wyświetlania wyników. Pozwala też na dodawanie oraz modyfikację istniejących danych. Poza obsługą poleceń SQL, SQL*Plus posiada też zestaw własnych komend służących do konfiguracji programu oraz nawiązywania połączeń z bazami.

Podstawowe polecenia SQL*PLUS

connect
polecenie nawiązuje połączenie z ze wskazaną bazą danych. Niezbędne do rozpoczęcia pracy z bazą danych. Bez nawiązania połączenia z bazą danych nie możemy na niej wykonywać żadnych operacji.




Składnia polecenia connect jest następująca:

nazwa_użytkownika/hasło@nazwa_bazy_wg_deskryptora

Aby zalogować się na użytkownika HR po wcześniejszym odblokowaniu go w systemie APEX podaj następującą ścieżkę:

hr/hasło_które_ustawiłeś@localhost;

disconnect polecenie zamyka sesję nawiązaną przy pomocy connect.



exit
kończy sesję, okno programu zostanie zamknięte.
desc
pozwala na uzyskanie opisu wybranego obiektu bazy danych.



@
uruchamia polecenia określone w pliku wskazanym jako parametr polecenia. Na dysku C: stworzyłem plik test.sql w którym umieściłem zapytanie o treści:

select * from jobs;

Następnie uruchomiłem komendę @c:\test.sql odnoszącą się do stworzonego wcześniej skryptu, czego efektem był taki oto ekran:



spool

przy pomocy tej komendy jesteśmy w stanie zapisać do pliku wszystkie wykonywane polecenia oraz wyniki ich działań. Wszystkie te dane będą pozostawać wyłącznie w pamięci operacyjnej i nie będą widoczne w pliku aż do czasu wykonania polecenia spool off kończącego zapis. Poniżej konsola wraz z plikiem efekty.txt do którego zostały zapisane komendy wraz z wynikami. Proszę zwrócić uwagę że zostały zapisane działania
w konsoli wykonane dopiero PO wydaniu komendy spool.


Spool off
Kończy zapis do pliku, zatrzymuje komendę spool.

Podstawowe opcje SQL*Plus

Opcje SQL*Plusa ustawia się poleceniem SET:
SET nazwa_opcji wartość

autocommit {on | off }

Zmienna modyfikuje ustawienie automatycznego zatwierdzenia wykonania poleceń lub po wykonaniu serii instrukcji (Domyślnie on)
Commit jest poleceniem służącym do zatwierdzania zmian w danych, wprowadzonych w obrębie sesji. Polecenie to może być wydawane jawnie lub niejawnie tj. możesz wyłączyć autocommit i zatwierdzać samodzielnie poprzez wydanie komendy „commit;” lub ustawić automatyczne zatwierdzanie. Jeśli nie zatwierdzisz zmian danych, zmiany będą dotyczyć tylko Twojej sesji i nie będą widoczne dla innych użytkowników.

echo {on | off}

decyduje, czy polecenia wysyłane na serwer są powtórnie wyświetlane w wyniku wykonania się polecenia. (Domyślnie on)
linesize n
zmienna określa jak długa ma być linia w buforze ekranowym SQL*Plusa. (Domyślnie 80)

pagesize n

określa rozmiar strony w wierszach. (Domyślnie 24)

serveroutput {on | off}

określa, czy komunikaty wypisywane podczas działania podprogramów PL/SQL mają być wyświetlane na konsoli SQL*Plusa. Domyślnie ustawiony jest brak wyświetlania.
(Domyślnie off)

Ćwiczenia

1. Podłącz się jako użytkownik hr do lokalnej bazy.
2. Uruchom zapisywanie tego co się dzieje na ekranie do pliku.
3. Wyświetl strukturę tabeli departments.
4. Zatrzymaj zapisywanie do pliku i sprawdź co zawiera plik.
5. Stwórz plik który zawiera polecenie opisania tabeli.
6. Wykonaj polecenie z pliku.
7. Rozłącz się z bazą bez zamykania okna programu.


Ten temat omawiam na poniższych szkoleniach:
Podstawy Oracle SQL
Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.

8 komentarzy:

  1. Zakładem, że założyłeś, że korzystający z kursu jest początkujący i używa edycji Express. Stąd propozycja: podaj ścieżkę do sqlplus lub napisz, że narzędzie linii komend jest dostępne w menu "Oracle Database 10g Express Edition" (w przypadku Windows, na Linuksie nie testowałem). Ja sam w pierwszym odruchu szukałem w menu nazwy SQL*Plus i nie znalazłem.

    Poza tym proponuję przerzucić trzeci akapit ("SQL*Plus jest podstawowym narzędziem...") na początek, pod nagłówek.

    I jeszcze mam życzenie, żeby napisać, jak czytać tą cudaczną nazwę z gwiazdką.

    OdpowiedzUsuń
  2. Czy "autocommit off" jest niejawnym rozpoczęciem transakcji (czyli "begin transaction")?

    OdpowiedzUsuń
  3. autocommit jest komendą programu (działa też w sql developerze). Nie jest to element SQL. Możemy go włączyć jeżeli chcemy by po każdej naszej operacji typu insert, update, delete nasz edytor wysyłał niejawnie commit do bazy (wtedy nie musimy co chwila z palca commitować).

    OdpowiedzUsuń
  4. Może inaczej sformułuję problem, bo wciąż nie roozumiem.

    Kiedy wypisuję kolejne polecenia w SQL Plus, mogą zajść następujące przypadki:
    1. Kazde polecenie jest wykonywane od razu.
    2. Polecenia są zapamiętywane w kolejności, ale nie są wykonywane, aż podam polecenie konsoli do wykonania sekwencji. (W innych dialektach SQL uzywa się polecenia GO, nie wiem, jak ma Oracle.)
    3. Polecenia sa zapamiętywane w kolejności, ale nie są wykonywane, aż podam polecenie jężyka SQL do wykonania sekwencji, co wiąże się z wykonaniem transakcji.

    Krótko: czy autocommit odnosi się do transakcji czy sekwencji (wsadu, batch'a)?

    OdpowiedzUsuń
  5. Witam mam problem z HR. Założyłem go ale przy logowaniu w Command Line dostaje komunikat że konto jest zablokowane. Założyłem nowe z schema z HR. Pokazuje tabelki w application express i mogę zalogować się w Command Line. Myślę sobie ekstra można zacząć kurs. Natomiast przy próbie wywołania tabelki poleceniem "select * from departments;" dostaję komunikat że tabelka nie istnieje to samo przy próbach z "desc". Jakieś rady jak to zwalczyć? Pozdrawiam

    OdpowiedzUsuń
    Odpowiedzi
    1. zaloguj sie jako administrator bazy i uzyj komendy "alter user HR identified by hr account unlock;"

      Usuń
  6. Witam, czy jest możliwe przy zapytaniu selectowym aby nagłówek tabeli nie był powtarzany np.co 10 linia.

    OdpowiedzUsuń