SQL*Plus este un instrument care va permite sa interactionati direct cu baza de date Oracle. SQL*Plus va da posibilitatea sa manipulati blocuri de comenzi SQL si PL/SQL, sa formatati rezultatele interogarilor, sa copiati date între tabele si sa executati cod SQL si PL SQL. De asemenea, puteti folosi SQL*Plus pentru a defini mediul care 17417c25r controleaza zona în care lucrati. Printre acesti parametri de control se numara cei care stabilesc dimensiunile paginilor si ale liniilor, afisarea sau neafisarea antetelor la prezentarea rezultatelor interogarilor si nivelul de feedbâck al serverului.
Acest capitol trateaza comenzile mai avansate care nu au fost prezentate în Capitolul 18, Formatarea rezultatelor interogarilor cu instructiuni SQL*Plus", precum si câteva comenzi mai putin cunoscute.
Comenzile SQL*Plus ofera utilizatorului, programatorului si administratorului bazei de date instrumentele necesare pentru accesarea simpla si eficienta a bazei de date Oracle. Printre avantajele utilizarii SQL*Plus se numara urmatoarele:
Acesta poseda un editor de text online care va permite sa salvati, sa încarcati si sa rulati blocuri de comenzi SQL si PL/SQL
Formateaza si efectueaza calcule asupra rezultatelor interogarilor
Afiseaza informatii referitoare la coloanele tabelelor
Acest capitol prezinta subiectele SQL*Plus mai avansate a caror cunoastere va va permite sa ajustati datele de iesire dupa necesitati.
Formatarea paginii
în SQL*Plus, o pagina înseamna un ecran plin cu informatii pe displayul calculatorului dumneavoastra sau o pagina a unui raport tiparit. Aveti posibilitatea sa plasati titluri în partea superioara si la baza fiecarei pagini, sa stabiliti numarul liniilor pe pagina si latimea fiecarei linii.
Dupa cum a fost descris în Capitolul 18, puteti include un titlu în partea superioara si la baza fiecarei pagini folosind comenzile ttitle, respectiv btitle. Acest paragraf descrie optiunile pe care le puteti folosi cu aceste doua comenzi.
col n |
Face ca urmatorul sir de caractere sa apara în coloana specificata a liniei. |
skip n |
Sare la linie noua de n ori. Daca n este mai mare decât 1 vor fi lasate n linii albe înaintea urmatorului sir de caractere. |
left |
Aliniaza la stânga urmatorul sir de caractere. |
right |
Aliniaza la dreapta urmatorul sir de caractere. |
center |
Centreaza urmatorul sir de caractere. |
bold |
Face linia aldina. Aldinele sunt redate pe ecranul dumneavoastra prin repetarea liniei de trei ori. La tiparire, linia este tiparita o singura data, cu aldine. |
Acesta este marcajul de continuare a liniei. Plasati cratima la sfârsitul unei linii care este continuata pe linia urmatoare. |
În plus, puteti include oricare dintre urmatorii parametri de sistem în instructiunile de configurare a titlurilor:
SQL.LNO |
Reprezinta numarul liniei curente |
SQL.PNO |
Reprezinta numarul paginii curente |
SQL.RELEASE |
Reprezinta numarul versiunii Oracle curente |
SQL.SQLCODE |
Reprezinta codul erorii curente |
SQL.USER |
Reprezinta numele utilizatorului curent |
Exemplul urmator foloseste câteva dintre aceste clauze si parametri pentru crearea unor rapoarte clare si atractive în acest exemplu, sunt folosite clauzele SQL*Plus
skip, center, left si right, precum si parametrul de sistem sql .pno:
ttitle center 'Compania XYZ' skip l -
center ' ** ** **' skip 2 left 'Raport de vanazari
zonale' -
right "Totaluri vânzari pe luna Iunie' skip 2 btitle left 'Confidential' RIGHT 'Pagina: ' format 999 -sql.pno
set linesize 60
column zona_vanzari heading 'Zona Vânzari' format A15 column totaluri_vanzari heading 'Total Vânzari' format
$99,999,999 break on zona_vanzari skip l
select zona_vanzari, totaluri_vanzari from lista_vanzari where luna_vanzari = '06'
Date de iesire:
Compania XYZ |
||
Raport de vânzari zonale |
Totaluri vânzari pe luna Iunie |
|
Zona Vânzari |
Total Vânzari |
|
North East | ||
South East | ||
Mid West | ||
Plains | ||
North West | ||
Confidential |
Pagina: 1 |
|
Variabilele de legatura sunt variabilele create în SQL*Plus. La aceste variabile se poate face apoi referire într un program PL/SQL ca si cum ar fi fost declarate în programul însusi. Variabilele de legatura sunt necesare deoarece variabilele declarate în programele PL/SQL nu sunt accesibile comenzilor SQL*Plus. Variabilele de legatura sunt utilizate frecvent pentru a gestiona returnarea valorilor de catre subprograme:
Pentru a crea o variabila de legatura, folositi comanda variable. Sintaxa acesteia este urmatoarea:
variable nume_variabila numar
Pentru a face referire la o variabila de legatura într-un subprogram PL/SQL, precedati variabila de legatura cu semnul doua puncte (:). De exemplu, instructiunea urmatoare face referire la variabila de legatura total_vanzari asociindu-i valoarea O într-un program PL/SQL:
:total_vanzari :=0;
Pentru a afisa valoarea variabilei de legatura total_vanzari, folositi comanda SQL*Plus print. Sintaxa acesteia este
print total_vanzari
O variabila de substitutie este o variabila definita de utilizator si care este precedata de caracterul &'. SQL*Plus trateaza variabila de substitutie ca si cum ar fi valoarea variabilei de substitutie si nu variabila însasi. Puteti folosi variabile de substitutie oriunde în comenzi S L si SQL*Plus, cîi exceptia primei comenzi introduse în timpul unei sesiuni SQL*Plus. Daca nu furnizati o valoare pentru variabila de substitutie, SQL*Plus va invita sa introduceti o valoare. Acest lucru se întâmpla atunci când variabila de substitutie este întâlnita în timpul executiei.
În exemplul urmator, variabila sorti este definita ca având valoarea pozitie, iar variabila tabel l este definita ca având valoarea lista_articole.
Primul exemplu foloseste variabile de substitutie, în timp ce al doilea exemplu foloseste valorile variabilelor de substitutie. Ambele exemple produc aceleasi rezultate.
break on Ssortl select * from Stabell order by Ssortl ASC;
break on pozitie
select * from lista_articole
order by pozitie ase;
Urmatoarele variabile de sistem afecteaza variabilele de substitutie:
set scan |
Activeaza si dezactiveaza substitutia. |
set define |
Defineste caracterul de substitutie în mod prestabilit acesta este caracterul &. |
set escape |
Defineste caracterul de evitare pe care îl veti folosi înaintea caracterului de substitutie. Acest caracter indica programului SQL*Plus sa trateze caracterul de substitutie ca pe un caracter obisnuit. |
set verify on |
Stabileste daca fiecare linie a fisierului de comenzi este afisata sau nu înainte si dupa substitutie. |
set concat |
Defineste caracterul de concatenare în mod prestabilit acesta este punctul (.). |
Exemplul urmator foloseste comanda set concat. SQL*Plus solicita automat utilizatorului sa introduca valoarea vânzarilor întrucât aceasta nu a fost definita anterior.
SQL> select * from lista_articole
where coduri_articole = '&c_articole.001';
Enter value for c_articole: 21345
Instructiunile anterioare vor fi interpretate astfel: SQL> select * from lista_articole where coduri_articole = '21345001';
Sa privim acum un exemplu mai apropiat de realitate, în care este folosita clauza order by cu o variabila de substitutie. Remarcati faptul ca în exemplul urmator SQL*Plus cere utilizatorului sa introduca o valoare pentru fiecare variabila de substitutie.
SQL> select * from lista_personal
SQL> where ocupatie = '&c_ocupatie'
SQL> order by '&c_ocupatie';
Enter value for c_ocupatie: profesor
old where ocupatie = '&c_ocupatie'
new where ocupatie = 'profesor'
Enter value for c_ocupatie: profesor
old order by '&c_ocupatie'
new order by 'profesor'
Remarcati din exemplul precedent faptul ca a trebuit sa introduceti de doua ori valoarea pentru variabila de substitutie c ocupatie. SQL*Plus va solicita sa introduceti valoarea pentru fiecare variabila de substitutie. Puteti sa evitati sa fiti solicitat sa introduceti în mod repetat aceleasi valori folosind combinatia &&. Aceasta indica programului SQL*Plus sa defineasca automat variabila de substitutie precedata de && ca fiind variabila de substitutie precedata de &. In acest fel, puteti sa recodificati instructiunea anterioara pentru a evita invitatiile repetate dupa cum urmeaza:
select * from lista_personal
where ocupatie = '&c_ocupatie'
order by '&&c_ocupatie' ;
SQL*Plus va permite sa va conectati la baza dumneavoastra de date prestabilita sau la o baza de date situataJa distanta. Pentru a realiza conexiuni la distanta, folositi comanda connect. In mod normal, atunci când porniti SQL*Plus, va conectati la baza dumneavoastra de date prestabilita.
Dupa ce ati accesat baza de date prestabilita, SQL*Plus va permite sa va conectati la aceeasi baza de date sub un alt nume. De exemplu, pentru a conecta utilizatorul user_ la baza de date prestabilita curenta folosind parola 0823KYQ, instructiunea dumneavoastra va arata în felul urmator:
SQLPLUS> CONNECT user_01/0823KYQ
SQL*Plus va solicita sa introduceti numele de utilizator si parola daca le-ati omis în sirul instructiunii connect.
Prin intermediul SQL*Plus puteti sa accesati si baze de date situate la distanta. Acest lucru este important atunci când lucrati într-un mediu distribuit. SQL*Pliis va permite sa va conectati la o baza de date situata la distanta în doua moduri:
Conectarea la baza de date situata la distanta are loc pe parcursul sesiunii SQL*Plus curente
Conectarea la baza de date situata la distanta are loc simultan cu lansarea comenzii sqlplus
Oricare ar fi varianta aleasa, trebuie sa aveti un nume de utilizator si o parola valide pentru baza de date la care doriti sa va conectati.
Pentru a va conecta la o baza de date situata la distanta din interiorul SQL*Plus, lansati comanda connect, urmata de numele de utilizator si de parola, precum si de specificatia bazei de date situate la distanta. De exemplu, instructiunea urmatoare stabileste o conexiune cu baza de date situata la distanta vanzari_california folosind numele de utilizator user_
SQLPLUS> CONNECT user_01/0823KQY@vanzari_california
Forma concreta a specificatiei bazei de date pe care o introduceti în instructiunea connect depinde de protocolul SQL*NET si de sistemul de operare al calculatorului dumneavoastra. Consultati manualul SQL*NET si administratorul sistemului pentru a afla sirul care trebuie folosit pentru specificarea bazei de date.
Pentru a va conecta la o baza de date situata la distanta de la linia de comanda, lansati comanda sqlplus împreuna cu specificatia bazei de date. Daca omiteti numele de utilizator si parola, SQL*Plus va solicita sa le introduceti. Exemplul urmator este asemanator cu cel precedent, cu exceptia faptului ca aceasta instructiune connect realizeaza conexiunea cu baza de date situata la distanta atunci când porniti SQL*Plus:
>SQLPLUS CONNECT user_01/0823KQY@vanzari_california
Veti ramâne conectat cu baza de date pâna în momentul în care efectuati una dintre urmatoarele actiuni:
Lansati o comanda connect pentru a va conecta la o alta baza de date
Lansati comanda disconnect
Parasiti SQL*Plus
SQL*Plus va permite sa copiati date în oricare dintre urmatoarele moduri:
De la o baza de date situata la distanta la alta baza de date situata la distanta
De la baza dumneavoastra de date prestabilita la o baza de date situata la distanta
De la o baza de date situata la distanta la baza dumneavoastra de date prestabilita
Sintaxa comenzii SQL*Plus este urmatoarea:
copy from nume_baza_de_date to nume__baza_de_date -actiune -
tabel_destinatie (nume_coloana, nume_coloana, ...) -using interogare
Sa analizam componentele comenzii SQL*Plus. Trebuie sa cunoasteti specificatiile exacte pentru ambele baze de date si sa posedati un nume de utilizator si o parola valide.
Comanda copy actioneaza diferit în functie de clauza actiune pe care o furnizati si în functie de faptul ca tabelul destinatie exista sau nu. Cele patru clauze pe care le puteti folosi sunt create, insert, append si replace.
Clauza create are ca rezultat urmatoarele actiuni:
Daca tabelul destinatie exista deja, este generata o eroare si procesarea se încheie.
Daca tabelul destinatie înca nu exista, comanda copy creeaza tabelul folosind datele copiate.
Clauza insert are ca rezultat urmatoarele actiuni:
Daca tabelul destinatie exista deja, comanda copy insereaza datele în tabel.
Daca tabelul destinatie nu exista înca, este generata o eroare si procesarea se încheie.
Clauza append are ca rezultat urmatoarele actiuni:
Daca tabelul destinatie exista deja, datele copiate sunt inserate în tabel.
Daca tabelul destinatie înca nu exista, comanda copy creeaza tabelul si insereaza datele copiate.
Clauza replace are ca rezultat urmatoarele actiuni:
Daca tabelul destinatie exista deja, comanda copy elimina datele existente si le înlocuieste cu datele copiate.
Daca tabelul destinatie înca nu exista, comanda copy îl creeaza folosind datele copiate.
În continuare sunt prezentate diverse comenzi SQL*Plus în completarea celor prezentate anterior, în acest capitol.
Ruleaza fisierul de comenzi specificat în mod prestabilit fisierul are extensia .sql si se presupune ca se gaseste în directorul prestabilit. Comanda urmatoare executa fisierul copiere_articole.sql: |
|
@copiere_articole.sql |
|
Returneaza un fisier de comenzi imbricat în mod prestabilit fisierul de comenzi are extensia,.sql si se presupune ca se gaseste în acelasi director ca si fisierul de comenzi în exemplul urmator, este prezentat fisierul de comenzi cdpiere_articole.sql. Atunci când procesarea ajunge la @articole_pret, se presupune ca acest fisier se gaseste în directorul prestabilit curent. Atunci când este executata linia @@articole trimiteri, se presupune ca acest fisier se gaseste în acelasi director ca si fisierul copiere_articole.sql. |
|
Select * from lista_articole; @articole_pret @@articole_trimiteri |
|
Comanda / executa comanda SQL sau blocul PL/SQL care se afla în tampon în momentul respectiv. Aceasta comanda este asemanatoare cu comanda run însa nu afiseaza comenzile pe ecran. |
|
accept |
Citeste o linie de date de intrare de la terminal si o stocheaza într-o variabila specificata. Puteti include clauza option hide la sfârsitul instructiunii pentru a dezactiva afisarea informatiilor introduse de utilizator. Un exemplu practic de utilizare a clauzei hide îl reprezinta solicitarea introducerii parolei de catre utilizator. Evident, nu veti dori ca aceasta sa fie afisata si pe ecran. |
Sintaxa: accept variabila tip_data prompt text În exemplul urmator, utilizatorul este solicitat sa introduca numarul de asistenta sociala al angajatului: accept nr_as_ang char prompt 'Introduceti numarul de asistenta sociala al angajatului:' |
|
Define |
Atribuie o valoare caracter unei variabile specificate de utilizator. Aceasta comanda poate fi folosita si pentru a afisa valoarea variabilei specificate. Primul exemplu atribuie o valoare caracter variabilei text_1: |
define text_1 = 'sirul dumneavoastra de caractere este stocat aici' Acest exemplu afiseaza valoarea variabila text Sql>define text_1 define text_1 = sirul dumneavoastra de caractere este stocat aici (char) |
|
Describe |
Afiseaza coloanele, tipurile datelor si lungimile coloanelor din tabelul, vederea sau sinonimul specificat. Poate fi folosita si pentru a afisa specificatia functiei, procedurii sau pachetului specificat sau a continutului pachetului specificat în exemplul urmator, este descris tabelul LISTA_ARTICOLE: |
Pentru a descrie tabelul, lansati comanda describe lista_articole Aceasta comanda afiseaza |
NAME |
NULL? |
TYPE |
ID_ARTICOL |
NOT NULL |
NUMBER |
NUMAR_ARTICOL |
NOT NULL |
VARCHAR2 (15) |
NUME_ARTICOL |
VARCHAR2 (50) |
|
COD_ARTICOL |
VARCHAR» (10) |
disconnect |
Deconecteaza utilizatorul de baza de la date Oracle si salveaza în baza de date toate modificarile aferente. Utilizatorul nu este deconectat de la SQL*Plus. Aceasta comanda este lansata la linia de comanda sqlplus. |
exit |
Deconecteaza utilizatorul de baza de date Oracle, îl deconecteaza de la SQL*Plus si salveaza în baza de date toate modificarile aferente. Aceasta comanda este lansata la linia de comanda sqlplus. |
help |
Acceseaza sistemul de asistenta soft al SQL*Plus. |
host |
Executa o comanda a sistemului de operare gazda fara parasirea SQL*Plus. Comanda urmatoare solicita afisarea listei directorilor din directorul curent: |
SQL> host directory |
|
remark |
Initiaza un comentariu al utilizatorului. Aceasta comanda nu este interpretata drept comanda de catre SQL*Plus |
Runform |
Invoca programul SQL*Forms din interiorul SQL*Plus |
Timing |
Înregistreaza informatii referitoare la timp pentru o perioada de timp. Afiseaza informatiile referitoare la timp cu clauza show. Instructiunea urmatoare creeaza o zona de cronometrare numita time_test, afiseaza data si ora, afiseaza timpul cronometrat si elimina din memorie zona de cronometrare |
timing start time_test set timing on timing show timing stop |
|
Undefine |
Elimina din baza de date variabila specificata definita de utilizator. Comanda urmatoare elimina din baza de date variabila calc_cost: undefine calc_cost |
whenwver oserror |
Paraseste SQL*Plus daca survine o eroare a sistemului de operare în mod prestabilit, SQL*Plus continua procesarea daca este omisa aceasta comanda. Aceasta comanda poate fi însotita de urmatoarele clauze: |
Exit |
Forteaza parasirea SQL*Plus atunci când este detectata o eroare a sistemului de operare. Puteti stabili ca la parasirea SQL*Plus sa fie retumat codul de eroare SQL*Plus, codul de eroare al sistemului de operare, un numar sau o variabila. |
continue |
Dezactiveaza optiunea exit. |
Commit |
Atunci când este detectata o eroare a sistemului de operare, se efectueaza salvarea tranzactiei curente. |
Rollback |
Executa o derulare înapoi atunci când este detectata o eroare a sistemului de operare. |
None |
Indica programului SQL*Plus sa nu reactioneze atunci când este detectata o eroare a sistemului de operare. |
Codul din exemplul urmator deruleaza înapoi toate modificarile pâna la ultimul punct de salvare la detectarea unei erori a sistemului de operare. Codul erorii sistemului de operare este returnat la parasirea SQL*Plus.
whenever oserror exit oscode rollback;
insert into costuri nocturne (select from lista costuri where costuri_nocturne.id = lista_costuri.id);
whenwver sqlerror Paraseste SQL*Plus atunci când o comanda SQL sau un bloc PL/SQL genereaza o eroare în mod prestabilit, SQL*Plus continua procesarea daca este omisa aceasta comanda. Aceasta comanda poate fi însotita de urmatoarele clauze:
exit |
Forteaza parasirea SQL*Plus atunci când este detectata o eroare SQL sau PL/SQL. Puteti stabili ca la parasirea SQL*Plus sa fie returnat codul de eroare SQL*Plus, codul de eroare al sistemului de operare, un numar sau o variabila. |
continue |
Dezactiveaza optiunea exit. |
commit |
Atunci când este detectata o eroare SQL sau PL/SQL, se efectueaza salvarea tranzactiei curente. |
rollback |
Executa o derulare înapoi atunci când este detectata o SQL sau PL/SQL. |
none |
Indica programului SQL*Plus sa nu reactioneze atunci când este detectata o eroare SQL sau PL/SQL. |
Codul din exemplul urmator deruleaza înapoi toate modificarile pâna la ultimul punct de salvare la detectarea unei erori SQL sau PL/SQL. Codul erorii SQL sau PL/SQL este returnat la parasirea SQL*Plus.
whenever sqlerror exit oscode rollback; insert into costuri nocturne (select from lista costurT where costuri_nocturne.id = lista costurT.id);
SQL*Plus este un instrument Oracle care permite utilizatorilor sa interactioneze direct cu serverul Oracle în acest capitol, au fost descrise câteva dintre comenzile de mediu care controleaza modul în care terminalul dumneavoastra interactioneaza cu SQL*Plus. De asemenea, au fost prezentate comanda copy si comenzile avansate ale programului SQL*Plus.
SQL*Plus este necesar pentru a permite utilizatorului sa lanseze comenzi SQL si blocuri de comenzi PL/SQL în vederea inserarii si manipularii datelor din baza de date. De asemenea, acest instrument permite formatarea, efectuarea de calcule asupra rezultatelor interogarilor precum si stocarea si tiparirea acestora.
Pe parcursul unei sesiuni SQL*Plus interactive, lansati comenzile SQL, blocurile de comenzi PL/SQL sau comenzile SQL*Plus pentru a obtine rezultatele dorite. Ca alternativa, aceste comenzi pot fi pastrate într-un fisier de comenzi care poate fi executat din interiorul SQL*Plus.
|