CATEGORII DOCUMENTE |
SQL este un limbaj de comenzi pentru comunicare cu server-ul Oracle.
SQL*Plus este un utilitar Oracle care recunoaste comenzile SQL si trimite aceste comenzi server-ului Oracle pentru executie.
SQL*Plus à instrument puternic care este utilizat in dezvoltarea aplicatiilor pentru baza de date Oracle.
SQL*Plus à instrument flexibil care poate fi executat pe toate platformele pe care se instaleaza produsul Oracle.
Ce operatii se pot realiza din consola SQL*Plus
editarea, salvarea, incarcarea si executia de comenzi SQL sau blocuri PL/SQL;
formatarea, salvarea, tiparirea si realizarea anumitor calcule asupra rezultatelor unei interogari sub forma de rapoarte;
listarea definitiilor tabelelor;
accesarea si transferarea datelor intre baze de date;
realizarea unor functii de administrare a BD: administrarea utilizatorilor, administrarea spatiilor tabel, operatii de arhivare si recuperare etc.
Deosebiri esentiale intre comenzile SQL si comenzile SQL*Plus
Marcam dintre aceste deosebiri cateva, care sunt semnificative. Comenzile SQL*Plus:
nu cer caracter de terminare;
cer un caracter de continuare daca comanda este mai mare decat o linie;
nu sunt depuse in buffer-ul SQL;
nu permit prelucrarea datelor din baza de date;
foloseste comenzi pentru formatarea datelor (SQL foloseste functii);
cuvintele cheie pot fi prescurtate.
Conexiune la SQL*Plus
Dupa ce utilizatorul se conecteaza la SQL*Plus, sistemul afiseaza un prompt (SQL>) si asteapta comenzile utilizatorului. Utilizatorul poate da:
comenzi SQL pentru accesarea bazei de date;
blocuri PL/SQL pentru accesarea bazei de date;
comenzi SQL*Plus.
Activarea interfetei SQL*Plus
Din WINDOWS:
Se selecteaza: START > PROGRAMS > ORACLE > APPLICATION DEVELOPMENT > SQL*Plus
Se da username, password si numele bazei.
Prin linia de comanda:
SQLPLUS [nume_utiliz/parola][@nume_baza_de_date] [@nume_fisier]
Inchiderea sesiunii de lucru SQL*Plus si preluarea controlului sistemului de operare al calculatorului gazda se realizeaza cu QUIT sau EXIT.
Conectarea la o alta baza de date decat cea deschisa initial, in timpul unei sesiuni de lucru SQL*Plus:
CONNECT [nume_utilizator[/parola]][@nume_baza_de_date]
Conexiunea ramane valida pana cand apare una din urmatoarele situatii:
se paraseste SQL*Plus;
se da comanda de deconectare DISCONNECT (comanda nu inchide sesiunea de lucru SQL*Plus);
se face conectarea la o alta baza de date.
Crearea unei legaturi intre BD locala si o BD aflata la distanta:
CREATE [PUBLIC] DATABASE LINK nume_legatura
CONNECT TO nume_utilizator
IDENTIFIED BY parola
USING baza_de_date_distanta
Dupa ce legatura a fost creata, pot fi facute interogari asupra tabelelor corespunzatoare BD distante prin specificarea numelui legaturii in clauza FROM din cerere. Daca se specifica optiunea PUBLIC, legatura este disponibila tuturor utilizatorilor cu exceptia celor care si-au definit o legatura privata cu acelasi nume.
Suprimarea unei legaturi intre doua BD, una locala si una la distanta:
DROP [PUBLIC] DATABASE LINK nume_legatura.
Cateva dintre cele mai importante comenzi disponibile in SQL*Plus :
ACCEPT - citeste o variabila de intrare de la utilizator;
DEFINE - declara o variabila (DEF);
DESCRIBE - listeaza atributele tabelelor sau ale altor obiecte (DESC);
EDIT - invoca editorul, salveaza continutul buffer-ului in fisierul afiedt.buf;
EXIT sau QUIT - deconecteaza utilizatorul si incheie sesiunea SQL*Plus;
GET - cauta un fisier SQL si il depune in buffer-ul SQL;
HOST - executa o comanda a sistemului de operare (!);
LIST - afiseaza ultima comanda executata din buffer-ul SQL (L);
PROMPT - afiseaza un text pe ecran;
RUN - listeaza si executa comanda salvata in buffer-ul SQL (/);
SAVE - salveaza comanda din buffer-ul SQL intr-un fisier script;
SET - modifica variabilele de mediu specifice SQL*Plus;
SHOW - afiseaza setarile variabilelor de mediu SQL*Plus;
SPOOL - copiaza iesirea unei comenzi intr-un fisier;
START - executa un script SQL (@).
Salvarea comenzilor
Comanda SQL, care este introdusa interactiv prin interfata SQL*Plus, este memorata intr-un buffer SQL. Ea poate fi modificata sau executata de mai multe ori, atata timp cat utilizatorul nu a introdus o noua comanda sau nu a sters explicit buffer-ul SQL (CLEAR BUFFER). Cererea noua va sterge vechea cerere din buffer.
Utilizatorul poate salva una sau mai multe comenzi intr-un fisier, ce ulterior poate fi incarcat, modificat sau executat. Extensia implicita a fisierului: .sql.
SAVE nume_fisier [CREATE|REPLACE|APPEND]
BUFFER
comenzi SQL comenzi SQL
comenzi SQL*Plus rezultatul cererii
RAPORT
(formatat)
SAVE alfa
EDIT alfa
@alfa
optiunea CREATE arata ca se creeaza un nou fisier;
optiunea REPLACE permite inlocuirea (overwrite) unui fisier existent;
optiunea APPEND adauga continutul buffer-ului in continuarea unui fisier.
Pentru incarcarea si executarea unui fisier de comenzi poate fi utilizata una din urmatoarele variante:
comanda START;
comanda ∂;
comenzile GET si RUN;
comenzile GET si
Pentru introducerea de comentarii printre comenzile care se gasesc intr-un fisier exista mai multe posibilitati:
utilizarea caracterelor "--" urmate de textul comentariului;
utilizarea delimitatorilor "/*" si "*/" pentru a marca inceputul si sfarsitul unui comentariu.
Pentru a obtine informatii referitoare la structura tabelelor, vizualizarilor sau sinonimelor, a procedurilor, functiilor sau pachetelor fara a fi necesara consultarea cataloagelor de sistem, se utilizeaza comanda:
DESCRIBE [nume_schema.]nume_obiect
Editarea comenzilor
Editorul integrat SQL *Plus (mini-editor mod linie) se incarca prin:
EDIT [nume_fisier[.extensie]]
Daca se doreste lansarea in executie a unui alt editor, se modifica variabila EDITOR cu ajutorul comenzii DEFINE. De exemplu:
DEFINE _EDITOR = vi
SQL*Plus pastreaza in memorie ultima comanda executata. Comenzile SQL*Plus nu sunt depuse in buffer-ul SQL. Ele se dau secvential, cate una la un moment dat. Daca comanda este prea lunga, ea va fi continuata pe linia urmatoare tastand caracterul "-" la sfarsitul liniei, inainte de a tasta RETURN.
Pentru editarea comenzilor SQL si a blocurilor PL/SQL se pot folosi:
A[PPEND] text - adauga textul specificat la sfarsitul liniei curente din buffer-ul SQL;
C[HANGE] separator old [separator [new [separator]]] - schimba textul old cu textul new (ca separator se poate folosi orice caracter care nu este alfanumeric);
DEL - sterge una sau mai multe linii din buffer-ul SQL (caracterul "*" indica linia curenta); DEL fara nici o clauza are ca efect stergerea liniei curente;
CL[EAR] BUFF[ER] - sterge toate liniile din buffer-ul SQL;
I[NPUT] [text] adauga una sau mai multe linii de text dupa linia curenta din buffer;
n text - inlocuieste linia n prin text;
L[IST] - listeaza una sau mai multe linii din buffer (caracterul "*" indica linia curenta); LIST fara nici o clauza listeaza toate liniile din buffer.
Comenzi interactive
SQL*Plus dispune de comenzi ce permit comunicarea directa cu utilizatorul:
comanda PAUSE permite afisarea unei linii vide sau unui text suspendand temporar actiunea si asteptand un RETURN de la utilizator;
comanda PROMPT trimite o linie goala sau un mesaj pe ecran;
comanda ACCEPT permite citirea unei linii de pe ecran si atribuirea valorii sale unei variabile (utilizator) specificate (variabila poate sa fie deja definita prin comanda DEFINE).
ACCEPT variabila [NUMBER | CHAR | DATE]
[FORMAT format] [PROMPT text | NOPROMPT] [HIDE]
Observatii:
tipul implicit al variabilei este CHAR;
textul de la optiunea PROMPT este tiparit inainte ca utilizatorul sa dea valoarea efectiva;
optiunea HIDE face ca valoarea data de utilizator sa fie mascata (de exemplu, o parola);
optiunea FORMAT indica modul de formatare;
variabila de substitutie, daca este prezenta, nu trebuie prefixata de simbolul "&".
Exemplu
ACCEPT alfa PROMPT 'Numarul de exemplare:'
ACCEPT beta PROMPT 'Numele autorului:'
SELECT *
FROM carte
WHERE nrex = &alfa
AND autor = '&beta';
Variabilele de substitutie (&nume)
Aceste variabile sunt utilizate pentru stocarea temporara a unor valori. Variabilele pot sa apara in comenzi SQL sau SQL*Plus. Interfata cere utilizatorului sa dea valori de fiecare data cand intalneste o variabila nedefinita. Daca variabila este precedata de simbolurile "&&", doar la prima apelare se va solicita o valoare.
Exemplu
SELECT nume, &&salariu
FROM salariat
ORDER BY &salariu;
Pentru variabilele de tip caracter sau de tip data calendaristica este obligatorie folosirea ghilimelelor. Variabilele de substitutie pot sa apara in conditia WHERE, in clauza ORDER BY, in expresia unei coloane, in numele unui tabel, in locul unei intregi comenzi SELECT.
Exemplu
SELECT &coloana
FROM &tabel
WHERE &conditie
ORDER BY &ordine;
Comanda SET VER[IFY] permite listarea (sau nu) textului unei comenzi SQL sau PL/SQL, inainte si dupa ce SQL*Plus inlocuieste variabilele de substitutie cu valori efective.
SQL*Plus permite definirea variabilelor utilizator de tip CHAR prin:
DEFINE variabila = valoare
Variabila ramane definita pana cand fie se paraseste SQL*Plus, fie se da comanda UNDEFINE pentru variabila respectiva.
Tiparirea tuturor variabilelor utilizator, a valorilor si tipurilor acestora se obtine prin forma DEFINE.
Exemplu
SQL> DEFINE autor1 = Zola
SQL> DEFINE autor2 = Blaga
SQL> SELECT titlu, nrex
2 FROM carte
3 WHERE autor = '&autor1'
4 OR autor = '&autor2';
Setari in SQL*Plus
Pentru a preciza optiunile de lucru cu SQL*Plus se utilizeaza comanda SET. Setarile SQL standard se gasesc in fisierul login.sql, care poate fi modificat pentru a contine setari aditionale. Cand se termina sesiunea toate setarile sunt pierdute.
Comanda SET are doua forme sintactice:
una din ele se foloseste ca Help pentru utilizator;
cealalta se foloseste pentru setarea variabilelor sistem.
O variabila sistem este un camp rezervat in care se retine o valoare de catre sistemul Oracle, valoare care indica o stare a sistemului. Pentru a afisa valorile tuturor variabilelor de mediu la un moment dat se utilizeaza comanda SHOW ALL.
SET variabila_sistem valoare
Parametrul variabila_sistem poate lua oricare din valorile care apar la executia comenzii SHOW ALL.
In continuare sunt prezentate numai o parte a acestor setari (in special cele folosite la formatarea rapoartelor) impreuna cu valorile pe care le poate lua parametrul valoare.
SET RECSEP - controleaza tiparirea separatorilor de inregistrari. Cele trei valori posibile au urmatoarele semnificatii:
WRAPPED tipareste un separator dupa fiecare linie a unei inregistrari (chiar daca aceasta cuprinde mai multe linii);
EACH face acelasi lucru, dar numai la sfarsitul unei inregistrari;
OFF anuleaza tiparirea unui separator.
SET RECSEPCHAR - seteaza caracterul ce separa inregistrarile;
SET SPACE - seteaza numarul de spatii intre coloane.
SET WRA[P] - specifica modul de afisare a inregistrarilor (trunchiat sau pe o linie).
SET NULL text - specifica textul afisat in locul valorii NULL.
SET HEADS[EP] - specifica caracterele ce separa numele coloanelor de inregistrari.
SET UND[ERLINE] - specifica caracterul folosit pentru sublinierea numelor coloanelor.
SET NEWP[AGE] - seteaza numarul de linii vide lasate la inceputul fiecarei pagini.
SET TERM[OUT] - controleaza afisarea output-ului generat de comenzi executate dintr-un script.
SET PAGES[IZE] - specifica numarul de linii afisate pe pagina (n implicit este 24; se poate seta la valoarea 0 pentru a suprima afisarea numelor coloanelor, a titlului unui raport).
SET FEED[BACK] - controleaza afisarea numarului de inregistrari furnizate ca rezultat de o comanda SELECT.
SET ECHO - controleaza afisarea comenzilor dintr-un script SQL lansat cu comanda START, pe masura ce acestea sunt executate.
Comanda SPOOL permite salvarea rezultatelor unei interogari intr-un fisier indicat ca parametru. Ea are urmatoarea sintaxa:
SPO[OL] [ file_name[. ext] | OFF | OUT]
Formatarea rezultatelor
Pentru afisarea unui titlu la inceputul sau sfarsitul fiecarei pagini a unui raport se folosesc comenzile TTITLE sau BTITLE, avand sintaxa urmatoare:
[TLE] [spec_tiparire [text | variabila]] [OFF | ON]
Semnificatia parametrilor impreuna cu valorile posibile sunt:
spec_tiparire controleaza amplasamentul si formatarea titlului prin combinarea unora dintre urmatoarele optiuni:
COL n indenteaza titlul la coloana n a liniei curente;
S[KIP] n realizeaza un salt peste n linii, la inceputul unei noi linii; daca n are valoarea 0, atunci sare la inceputul liniei curente;
TAB n realizeaza un salt peste n coloane pe linia curenta (salt inainte daca n este pozitiv si salt inapoi daca n este negativ);
LE[FT], CE[NTER], RI[GHT] aliniaza datele la stanga, in centru sau la dreapta;
BOLD realizeaza ingrosarea caracterelor textului;
FOR[MAT] format - formateaza coloana conform cu specificatia data de format (de exemplu, daca coloana este de tip caracter atunci An are semnificatia ca valoarea coloanei se va scrie pe n caractere la afisare);
text reprezinta textul titlului incadrat de ghilimele simple (in cazul in care contine mai multe cuvinte se poate folosi caracterul '|' pentru impartirea unui titlu pe mai multe linii);
variabila este o variabila sistem sau o variabila definita de utilizator (de exemplu, SQL.PNO este o variabila sistem care specifica numarul paginii curente; SQL.LNO specifica numarul liniei curente; variabila SQL.USER specifica numarul utilizatorului curent etc.).
Comanda COLUMN permite controlul afisarii coloanelor si a numelor.
COL[UMN] [ [optiune]]
coloana este numele coloanei asupra careia se aplica sau careia i se citeste formatarea intr-o comanda SELECT.
Valorile parametrului optiune pot fi:
NOPRI[NT] | PRI[NT] - controleaza afisarea unei coloane;
ALI[as] alias - specifica un alias pentru coloana sau expresia respectiva;
CLE[AR] - reseteaza atributele de afisare ale coloanei; pentru a face acest lucru pentru toate coloanele se foloseste comanda CLEAR COLUMNS;
HEA[DING] text - seteaza numele coloanei text;
NEW_V[ALUE] - specifica o variabila in care se retine valoarea unei coloane; variabila poate fi apoi referentiata in comanda TTITLE; numele coloanei trebuie inclus intr-o comanda BREAK impreuna cu SKIP PAGE; aceasta optiune este utila atunci cand trebuie facute rapoarte master/detail si fiecare inregistrare master trebuie sa apara pe o noua pagina;
OLD_V[ALUE] - semnificatia este cea anterioara, dar cu deosebirea ca referentierea variabilei se face intr-o comanda BTITLE;
JUS[TIFY] - aliniaza numele coloanelor (implicit are valoarea R[IGHT]);
FOR[MAT] format - aceeasi semnificatie ca cea descrisa pentru BTITLE sau TTITLE.
Exemplu
COLUMN sal JUSTIFY LEFT
COLUMN autor NULL 'necunoscut'
SQL*Plus permite regruparea liniilor rezultatului in functie de una sau mai multe valori ale coloanelor si eventual efectuarea unor actiuni la fiecare rupere. Liniile rezultatului trebuie sa fie ordonate (ORDER BY) dupa coloana in functie de ale carei valori se fac ruperile.
Elementul dupa care se face fragmentarea poate fi:
un nume de coloana sau o expresie (valoarea coloanei sau a expresiei este afisata doar pentru prima linie a grupului);
ROW (actiunea este executata pentru fiecare linie);
REPORT (actiunea este executata la sfarsitul raportului).
Comanda BREAK modifica formatul unui raport intr-unul din modurile:
suprima afisarea valorilor duplicate pentru o anumita coloana;
sare peste o linie cand valoarea unei coloane se schimba;
tipareste expresii calculate utilizand comanda COMPUTE de fiecare data cand valoarea unei coloane se modifica sau la sfarsitul unui raport.
BRE[AK] [ON element_fragmentare [actiune [actiune].]]
Parametrii acesteia au forma:
element_fragmentare
actiune [SKI[P] n | [SKI[P]] PAGE] [NODUP[LICATES] | DUP[LICATES]]
Exemplu
BREAK ON autor SKIP 4 ON intdom SKIP 2
Utilizatorul poate realiza operatii de calcul asupra liniilor fiecarui subansamblu creat prin BREAK.
Pentru calculul anumitor functii standard (pe coloane) se foloseste comanda COMPUTE care are urmatoarea forma sintactica:
COMP[UTE] [function [LAB[EL] text] .
OF .
ON .]
Optiunile au urmatoarele semnificatii:
function poate fi una dintre functiile AVG, COU[NT], MAX[IMUM], MIN[IMUM], NUM[BER], STD, SUM, VAR[IANCE];
text defineste eticheta afisata pentru valoarea calculata;
OF specifica coloanele sau expresiile folosite in functia calculata; acestea trebuie sa apara si in comanda SELECT, altfel SQL*Plus ignora comanda COMPUTE; column nu poate fi atasata unui tabel sau unei vizualizari decat folosind un alias pentru coloana respectiva;
ON specifica evenimentul folosit de SQL*Plus ca break, adica elementul de fragmentare.
Ca si in cazul comenzilor COLUMN sau BREAK, COMPUTE fara nici o clauza listeaza toate definitiile de COMPUTE.
Pentru realizarea corecta a calculului functiei trebuie indeplinite conditiile:
una sau mai multe dintre expresiile, coloanele sau alias-urile de coloane referentiate in clauza OF trebuie sa apara si in comanda SELECT;
expresia, coloana sau alias-ul de coloana referentiat in clauza ON trebuie sa apara in comanda SELECT si in cea mai recenta comanda BREAK;
daca ROW sau REPORT sunt referentiate in clauza ON atunci ele trebuie sa apara si in cea mai recenta comanda BREAK.
Exemplu
Sa se calculeze valoarea medie a preturilor cartilor fiecarui autor.
BREAK ON autor SKIP 1
COMPUTE AVG OF pret ON autor
SELECT autor,pret
FROM carte
ORDER BY autor;
Comanda CL[EAR] optiune permite resetarea valorilor specificate in anumite optiuni. Parametrul optiune reprezinta una din urmatoarele clauze: BRE[AKS] , BUFF[ER], COL[UMNS], COMP[UTES], SCR[EEN], SQL, TIMI[NG].
Copierea datelor
Pentru a copia datele furnizate de o interogare intr-un tabel aflat intr-o baza de date locala sau la distanta se poate folosi comanda COPY, care permite:
copierea unui tabel dintr-o baza locala intr-o baza distanta (optiunea FROM poate fi omisa);
copierea unui tabel dintr-o baza distanta intr-o baza locala (optiunea TO poate fi omisa);
copierea unui tabel dintr-o baza distanta intr-o baza distanta.
COPY
destination_table [(column, column, )]
USING query
database_specification reprezinta un sir de conectare SQL*Net;
APPEND insereaza liniile intoarse de query in destination_table daca acesta exista; in caz contrar, creeaza in prealabil tabelul;
CREATE insereaza liniile intoarse de query in destination_table, dupa ce creeaza tabelul; daca acesta deja exista, COPY returneaza o eroare;
INSERT insereaza liniile intoarse de query in destination_table; daca tabelul nu exista COPY returneaza o eroare; cand se foloseste optiunea INSERT, clauza USING query trebuie sa selecteze cate o coloana pentru fiecare coloana din destination_table;
REPLACE inlocuieste destination_table si continutul sau cu liniile intoarse de query; daca destination_table nu exista, atunci COPY creaza tabelul; altfel, COPY sterge mai intai tabelul existent si il inlocuieste cu un tabel ce contine datele copiate.
Exemplu
Sa se inlocuiasca continutul tabelului produse cu informatii ce provin dintr-o baza de date distanta (biblioteca). Aceste informatii se refera la cartile de informatica din tabelul carte.
COPY FROM vasile/ana@biblioteca
REPLACE produse
USING SELECT *
FROM carte
WHERE coded = 'I';
Exemplu
Sa se creeze un fisier care tipareste codul cartilor imprumutate si codul cititorilor care au imprumutat aceste carti, la o data ce apartine unui interval specificat. Sa se concateneze cele doua coduri astfel incat sa apara separate prin virgula si avand numele informatii.
Solutie
SET ECHO OFF FEEDBACK OFF
ACCEPT low_date DATE FORMAT 'MM/DD/YY' -
PROMPT 'dati limita inferioara a datei:'
ACCEPT high_date DATE FORMAT 'MM/DD/YY' -
PROMPT 'dati limita superioara a datei:'
COLUMN informatii FORMAT A25
SELECT codel || ',' || codec informatii, dataim
FROM imprumuta
WHERE dataim BETWEEN
TO_DATE('&low_date', 'MM/DD/YY')
AND TO_DATE('&high_date', 'MM/DD/YY')
UNDEFINE low_date
UNDEFINE high_date
CLEAR COLUMNS
SET ECHO ON
SET FEEDBACK ON
Exemplu
Sa se creeze un fisier care tipareste un raport grupat pe autori, continand: numele autorului, titlul cartilor sale din biblioteca, domeniul fiecarei carti si valoarea totala a fiecarei carti. Aceste rezultate sunt obtinute pentru cartile din biblioteca care sunt intr-un numar de exemplare specificat. Rezultatele sa apara sub forma:
NUME TITLU DOMENIU VALOARE
AUTOR CARTE CARTE TOTALA
Oprean Grupuri Algebra 55,000
Inele Algebra 63,768
Solutie
SET ECHO OFF FEEDBACK OFF
ACCEPT num PROMPT 'Dati numarul de exemplare:'
COLUMN autor HEADING 'NUME|AUTOR' FORMAT A15
COLUMN titlu HEADING 'TITLU|CARTE' FORMAT A15
COLUMN intdom HEADING 'DOMENIU|CARTE' FORMAT A15
COLUMN val HEADING 'VALOARE|TOTALA' FORMAT $99,999
SELECT autor, titlu, intdom, pret*nrex val
FROM carte c, domeniu d
WHERE c.coded = d.coded
AND nrex = &num
ORDER BY autor
UNDEFINE num
SET ECHO ON FEEDBACK ON
CLEAR BREAKS
CLEAR COLUMNS
Exemplu
Sa se creeze un script la a carui rulare sa apara urmatorul raport:
CONTRACTELE SUBANTREPRENORULUI CONSTRUCT SA
LA DATA DE 14/10/2001
NUMAR VALOARE
NUME CONTRACT CONTRACT
----- ----- ------ ----- ----- -----
CONSTRUCT SA 100 50000
101 120000
---------
TOTAL 170000
Pagina 1
CONTRACTELE SUBANTREPRENORULUI ERBASU SA
LA DATA DE 14/10/2001
NUMAR VALOARE
NUME CONTRACT CONTRACT
----- ----- ----- ----- ----- ------
ERBASU SA 107 20000
108 300000
109 750000
---------
VALOAREA MAXIMA 750000
TOTAL 1070000
Pagina 2
CONTRACTELE SUBANTREPRENORULUI GAUDI
LA DATA DE 14/10/2001
NUMAR VALOARE
----------- ----- ----- ----- ----- ----- ------
GAUDI 104 500000
105 27000
106 10000
---------
VALOAREA MAXIMA 500000
TOTAL 537000
Pagina 3
Solutie
SET ECHO OFF FEEDBACK OFF
COLUMN cod NOPRINT
COLUMN name NEW_VALUE nv_name HEADING 'NUME'
COLUMN nrct FORMAT A8 HEADING 'NUMAR|CONTRACT'
COLUMN val HEADING 'VALOARE|CONTRACT'
COLUMN azi NOPRINT NEW_VALUE nv_azi
TTITLE SKIP 1 LEFT 'CONTRACTELE SUBANTREPRENORULUI'-
nv_name SKIP 1 LEFT 'LA DATA DE 'nv_azi SKIP 2
BTITLE SKIP 1 LEFT 'Pagina:' FORMAT 99 SQL.PNO
COMPUTE MAX LABEL 'VALOAREA MAXIMA' SUM LABEL -
'TOTAL' OF val ON name
SELECT ct.cod_contractant cod,sub.nume name,
ct.nr_contract nrct, ct.val_investitie val, TO_CHAR(SYSDATE,'DD/MM/YYYY') azi
FROM contract ct, subantreprenor sub
WHERE ct.cod_contractant = sub.cod_contractant
ORDER BY cod
SET ECHO ON FEEDBACK ON
CLEAR BREAKS
CLEAR COLUMNS
CLEAR COMPUTES
Exemplu
Presupunem ca tabelul carte contine un camp suplimentar numit tip, prin care se specifica tipul unei carti. Acest tip poate fi: roman, poezie, monografie, culegere sau diverse. Sa se genereze un raport care sa contina pentru fiecare autor: numarul exemplarelor de fiecare tip scrise de acesta si numarul total de exemplare. De asemenea, sa se obtina in finalul raportului, numarul exemplarelor de fiecare tip din biblioteca.
Solutie
SET ECHO OFF FEEDBACK OFF
COLUMN autor FORMAT A12 HEADING 'Nume|autor'
COLUMN roman FORMAT 99999 HEADING 'Roman'
COLUMN poezie FORMAT 99999 HEADING 'Poezie'
COLUMN monografie FORMAT 99999 HEADING Monografie'
COLUMN culegere FORMAT 99999 HEADING 'Culegere'
COLUMN diverse FORMAT 99999 HEADING 'Diverse'
COLUMN total FORMAT 99999 HEADING 'Total'
BREAK ON REPORT SKIP 2
COMPUTE SUM OF roman ON REPORT
COMPUTE SUM OF poezie ON REPORT
COMPUTE SUM OF monografie ON REPORT
COMPUTE SUM OF culegere ON REPORT
COMPUTE SUM OF diverse ON REPORT
COMPUTE SUM OF total ON REPORT
TTITLE CENTER 'Raport carte'
SELECT autor,
SUM(DECODE(tip,'roman',nrex,0)) roman,
SUM(DECODE(tip,'poezie',nrex,0)) poezie,
SUM(DECODE(tip,'monografie',nrex,0))monografie,
SUM(DECODE(tip,'culegere',nrex,0))culegere,
SUM(DECODE(tip,'diverse',nrex,0)) diverse,
SUM(nrex) total
FROM carte
GROUP BY autor
/
CLEAR BREAKS
CLEAR COLUMNS
CLEAR COMPUTES
SET ECHO ON FEEDBACK ON
Exemplu
Sa se genereze un raport prin care sa se obtina pentru fiecare domeniu de carte informatii despre numele domeniului, titlurile cartilor din domeniu, numarul de exemplare din fiecare carte si din fiecare domeniu, iar in final raportul sa contina si numarul total de carti din biblioteca.
Solutie
SET ECHO OFF FEEDBACK OFF
COLUMN intdom FORMAT A25 HEADING 'denumire|domeniu'
COLUMN titlu FORMAT A30 HEADING 'titlu|carte'
COLUMN nrex FORMAT 99999 HEADING 'numar|carti'
BREAK ON intdom SKIP 2 ON REPORT SKIP 1
COMPUTE SUM OF nrex ON intdom
COMPUTE SUM OF nrex ON REPORT
TTITLE CENTER 'Raport carti' SKIP 1 LINE
SELECT intdom, titlu, nrex
FROM carte c, domeniu d
WHERE c.coded = d.coded
ORDER BY intdom
/
COLUMN denumire CLEAR
COLUMN titlu CLEAR
COLUMN nrex CLEAR
CLEAR BREAKS
CLEAR COMPUTES
SET ECHO ON FEEDBACK ON
Observatii
In iSQL*Plus, se actioneaza butonul Execute pentru executarea comenzilor din fereastra de editare. Implicit, capul de tabel este centrat si afisat cu litere majuscule.
Pentru a accesa iSQL*Plus este necesara adresa URL. Aceasta cere un host name (este dat de instructor).
Valoarea null este diferita de zero (care este un numar) sau de spatiu (care este un caracter).
Pentru a crea si asigna o valoare unei variabile se poate utiliza comanda DEFINE, iar stergerea acesteia se face prin comanda UNDEFINE.
SET VERIFY ON forteaza iSQL*Plus sa tipareasca textul unei comenzi inainte si dupa substituirea variabilelor de substitutie cu valori.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1196
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved