In acest capitol vom prezenta facilitatile pentru SQL*Plus.In particular, capitolul prezinta modul in care comenzile SQL*Plus pot fi folosite pentru a formata rezultatele cererilor in rapoarte simple.
SQL*Plus este un mediu in care pot apare doua tipuri de comenzi :
Comenzile SQL*Plus difera de comenzile SQL in urmatoarele moduri :
Comenzile SQL*Plus pot fi folosite pentru a influenta prezentarea datelor
furnizate de declaratiile SELECT, si din acest motiv sint folositoare pentru
producerea rapoartelor, la fel de bine ca si pentru contolul mediului si
pentru identificatorul de fisier.
Comenzile SQL*Plus sint introduse la promter-ul SQL pe o singura linie, dar ele nu deschid un buffer.Urmatoarele sint citeva comenzi suplimentare.
Comenzile SET controleaza 'mediul' in care ruleaza in mod curent SQL*Plus. In general, comenzile asociaza o valoare unei variabile de sistem sau o trece pe ON sau OFF.Aceste comenzi pot fi folosite in mod implicit pentru fiecare sesiune prin includerea lor intr-un fisier numit LOGIN.SQL, care este citit de fiecare data cind se ruleaza SQL*Plus.Daca o comanda SET aparuta in timpul se- siunii modifica valoarea implicita, aceasta va fi valabila doar pentru acea sesiune.Iesirea (EXIT) din SQL*Plus va reseta variabilele de sistem la valo- rile lor implicite.
Comenzile SQL*Plus pot fi prescurtate.
Cuvintele subliniate reprezinta starile implicite pentru comenzile de mai jos.
Pentru a gasi valoarea pentru o variabila SET folosim comanda SHOW. De exemplu, pentru a gasi dimensiunea paginii (pagesize), introducem :
SHOW PAGES[IZE]
Pentru a vedea valorile pentru toate variabilele SET, introducem :
SHOW ALL |---------------------------------------------------------------------| | | | RAPOARTE SQL*PLUS | | | | Titlu | | | | | | | | |------------------------------|------------------------------| | | | | | | | | Thu April 10 | Page 1 | | | | | | | | | | | | | | COMPANY REPORT | | | | | | | | | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | ===== | | | | | | | | | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | ===== | | | | | | | | | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | ----- -------- ------ ----- --- ------- | | | | | ===== | | | | | ===== | | | | | | | | | | | Confidential | | | | | | | | | | | | | | | | |------------------|---------------------------------|--------| | | | | | | | | | | Formate de coloana Calcule | | | | | |---------------------------------------------------------------------|
Comanda COLUMN stabileste optiunile de afisare pentru o coloana.Formatul este :
COL[UMN] nume_coloana / alias lista_optiuni
Observatii asupra optiunilor pentru COLUMN :
COL nume_coloana / alias
Alte citeva optiuni pentru COLUMN sint :
An alfanumeric, de lungime n 9 pozitie numerica 999999 1234 0 forteaza zerouri principale 099999 001234 $ floating dollar $999999 $1234 . punct zecimal 999999.99 1234.00 , virgula 999,999 1,234 MI semnul minus la dreapta 999999MI 1234- PR numere negative intre paranteze 999999PR <1234> EEEE notatie stiintifica 99.999EEEE 1.234E+03 V multiplicare cu 10 la n 9999V99 123400 (n = numar de 9 dupa V) B valorile zero devin blank-uri B9999.99
### ...valoare prea mare pentru format % ...tip gresit al valorii pentru format
COLUMN DEPTNO FORMAT 099 HEADING 'Dept.' COLUMN JOB FORMAT A9 HEADING 'Job' JUSTIFY RIGHT COLUMN EMPNO FORMAT 9999 HEADING 'Empl|No' COLUMN SAL FORMAT 99,999.99 HEADING 'Monthly|Salary' COLUMN COMM FORMAT 99,990.99 HEADING 'Y-T-D|Commission' - NULL 'No Comm' COLUMN REM FORMAT 999,999.99 HEADING 'Total Rem.' SELECT DEPTNO, JOB, EMPNO, SAL, COMM, SAL*12+NVL(COMM,0) REM FROM EMP;
Rezultatul cererii afiseaza caracteristici ale optiunilor de formatare a coloanelor. Fiecare coloana are un titlu diferit. Justificarea titlului a fost schimbata din cea implicita, si in unele cazuri separata peste un numar de linii, folosind o bara verticala (|), Optiunea NULL a fost folo- sita sa forteze un sir de caractere sa fie afisat cand un null ar trebui in mod normal sa apara.
Clauza SELECT poate contine alias-uri de coloane, coloane cu un prefix de tabela, expresii si siruri literale care determina numele coloanei speci- ficat in comanda COLUMN a SQL*PLUS.
Daca aceasta este lista Folositi acest nume de coloana de articole a SELECT-ului in comanda COLUMN ------------------------- ------------------------------ sal sal emp.sal sal e.sal sal sal*12+nvl(comm,0) sal*12+nvl(comm,0) sal*12 annsal annsal sysdate sysdate empno||'-'||ename empno||'-'||ename To_char(Hiredate,'ddth To_char(Hiredate,'ddth MONYYYY') MONYYYY') To_char(sysdate,'Day Today Mon YY')Today
Comenzile TTITLE si BTITLE sunt folosite pentru a produce titluri pe o pagina.
Comanda Descriere ------- --------- TTITLE 'sir de caractere' tipareste data curenta in coltul din stanga sus al fiecarei pagini, numarul paginii in coltul din dreapta sus si cen- treaza titlul pe linia de dedesupt. BTITLE 'sir de caractere' tipareste textul centrat in partea de jos a fiecarei pagini. In ambele cazuri un ca- racter '|' va face ca urmatorul text sa fie centrat pe linia urmatoare. TTITLE afiseaza TTITLE-ul sau BTITLE-ul curent BTITLE TTITLE OFF anuleaza afisarea unui titlu definit ante- BTITLE OFF rior sau a unei note de subsol.
COLUMN DEPTNO FORMAT 099 HEADING 'Dept.' COLUMN JOB FORMAT A9 HEADING 'Job' JUSTIFY RIGHT COLUMN EMPNO FORMAT 9999 HEADING 'Empl|No' COLUMN SAL FORMAT 99,999.99 HEADING 'Monthly|Salary' COLUMN COMM FORMAT 99,990.99 HEADING 'Y-T-D|Commission' - NULL 'No Comm' COLUMN REM FORMAT 999,999.99 HEADING 'Total Rem.' TTILTE 'COMPANY REPORT|Produced by Personnel Dept' BTITLE 'Company Confidential' SELECT DEPTNO, JOB, EMPNO, SAL, COMM, SAL*12+NVL(COMM,0) REM FROM EMP;
Comenzile TTITLE si BTITLE pot include un numar de clauze, facand posibil ca aparitia titlului sa fie specificata mai detaliat.
TTI[TLE] [printspec OFF ON] printspec defineste titlul si poate contine mai multe clauze. BTI[TLE] [printspec OFF ON] printspec defineste not de subsol si poate contine mai multe clauze.
COL n sare tiparirea pozitiei n a liniei curente (inapoi daca coloana a fost trecuta). SKIP n sare de la startul unei noi linii de n ori. Daca n este omis, sare o linie; daca n este 0, inapoi la inceputul liniei curente. TAB n sare inainte n pozitii de tiparit (inapoi daca n este negativ). LEFT,CENTER and aliniere stanga, centru sau dreapta pe linia RIGHT curenta. Articolele de date ce urmeaza aces- tei clauze sunt aliniate ca un grup, pana la sfarsitul comenzii TTILTE sau pana la urmato- rul LEFT, CENTER, RIGHT sau COLUMN.(CENTER si RIGHT folosesc valoarea lui SET LINESIZE pentru a calcula pozitiile articolelor de da- te). FORMAT defineste formatul articolelor de date care o urmeaza, pana la urmatoarea clauza FORMAT sau pana la sfarsitul comenzii.Specificarea for- matului este la fel cu cea a clauzei FORMAT a comenzii COLUMN. O singura specificare de format poate fi efectiva la un moment dat. Daca este al unui tip de date gresit pentru un articol particular, nu are efect asupra acelui articol particular. Daca nu este efectiva nici o clauza FORMAT potrivita, valorile numerice sunt tiparite in acord cu formatul SET NUMFORMAT, sau daca SET NUMFORMAT nu a fost folosit, in acord cu formatul implicit. Valorile datei sunt tipa- rite in formatul implicit. SQL.PNO Variabila sistem pentru numarul paginii cu- rente a raportului. Va puteti referi la va- loarea unei variabile sistem dandu-i prefixul SQL. De exemplu, pentru a folosi variabila PNO scrieti: TTITLE RIGHT 'page' SQL.PNO Aceasta va produce 'page 1' la marginea din dreapta a liniei daca 1 este pagina curenta.
Liniile unui raport pot fi sparte in sectiuni, folosind comanda BREAK. Prin spargerea unei coloane, afisarea valorilor duplicate este eliminata. Puteti deasemenea sa lasati linii goale sau sa incepeti o noua pagina intre sectiuni. Pana cand va aparea o 'spartura' , valorile coloanelor se schimba de fiecare data, trebuie sa va reamintiti sa 'ORDER BY' coloana declaratia SELECT sau raportul dumneavoastra va fi rupt in sectiuni de neinteles.
Poate fi o singura comanda BREAK activa la un moment dat; prin urmare, daca cereti break-uri multiple ele trebuie sa fie specificate ca o singura comanda BREAK. Trebuie sa listati coloanele sparte in ordinea importantei, 'sparturile' majore mai intii.
Break-urile pot fi active la :
BREAK ON [column/alias ROW][SKIP n DUP PAGE] ON...[ON REPORT]
Un BREAK ON REPORT va permite calcule finale sumare. La orice "break", ur- matoarele optiuni pot fi specificate:
Optiune Descriere ------- --------- PAGE renunta la o pagina cand o valoare in coloana se schimba. SKIP n sare n linii cand valoarea se schimba. DUP[LICATE] duplica valorile. Implicit este: NODUP[LICATE].
BREAK ON REPORT ON DEPTNO PAGE ON JOB SKIP 2 BREAK ON REPORT ON DEPTNO PAGE ON JOB DUP
Pentru a curata break-urile emiteti comanda:
CLEAR BREAKS
Pentru a tipari break-urile curente emiteti comanda:
BREAK
Urmatorul exemplu ilustreaza folosirea BREAK-urilor:
COLUMN DEPTNO FORMAT 099 HEADING 'Dept.' COLUMN JOB FORMAT A9 HEADING 'Job' JUSTIFY RIGHT COLUMN EMPNO FORMAT 9999 HEADING 'Empl|No' COLUMN SAL FORMAT 99,999.99 HEADING 'Monthly|Salary' COLUMN COMM FORMAT 99,990.99 HEADING 'Y-T-D|Commission' - NULL 'No Comm' COLUMN REM FORMAT 999,999.99 HEADING 'Total Rem.' TTILTE 'COMPANY REPORT|Produced by Personnel Dept' BTITLE 'Company Confidential' BREAK ON DEPTNO SKIP 1 ON JOB ON REPORT SELECT DEPTNO, JOB, EMPNO, SAL, COMM, SAL*12+NVL(COMM,0) REM FROM EMP ORDER BY DEPTNO,JOB;
Comanda COMPUTE executa calcule pe break-uri stabilite de comanda BREAK.
COMPUTE clauza(e) OF coloana(e) ON break(uri) Comanda Descriere ------- --------- OF specifica coloana sau expresia a carei valoare va fi calculata. ON specifica articolul de date sau elementul de tabe- la care sa fie folosit ca break. Clauza Calcule Aplicate pe tipul de coloana ------ ------- ---------------------------- AVG valoare medie numar COU[NT] contorizeaza valori toate tipurile nenule MAX[IMUM] valoare maxima numar, caracter MIN[IMUM] valoare minima numar, caracter NUM[BER] contorizare a liniilor toate tipurile STD deviatia standard numar SUM suma valorilor nenule numar VAR[IANCE] variatie numar
Pot fi multe comenzi COMPUTE, cu toate ca adesea este mai usor sa specificati toate calculele cerute intr-o singura comanda.
De exemplu:
COMPUTE SUM AVG OF SAL COMM ON DEPTNO REPORT
SET COL SET UP TTITLE SQL*PLUS ENVIRONMENT BTITLE BREAK SELECT ... SQL / TTITLE OFF COL DEPTNO CLEAR RESET SQL*Plus COL EMPNO CLEAR ENVIRONMENT Etc.
SET ECHO OFF SET PAGESIZE 24 SET FEEDBACK OFF SET LINESIZE 78 COL A FORMAT A10 HEADING 'Department' COL B FORMAT A9 HEADING 'Job' COL C FORMAT 9999 HEADING 'Emp.|No.' COL D FORMAT A8 HEADING 'Name' COL E FORMAT A5 HEADING 'Hire|Date' COL F FORMAT B99,999.99 HEADING 'Monthly|Salary' COL G FORMAT 9,990.99 HEADING 'Annual|Comm' COL H FORMAT 999,999.99 HEADING 'Total' BREAK ON A SKIP 1 ON B TTITLE 'EMPLOYEE REPORT' BTITLE 'CONFIDENTIAL' SELECT DNAME A, JOB B, EMPNO C, ENAME D, TO_CHAR(HIREDATE,'MM/YY') E, SAL F, COMM G, SAL*12+NVL(COMM,0) H FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO ORDER BY DNAME,JOB / CLEAR COLUMNS TTITLE OFF BTITLE OFF SET FEDBACK ON SET PAGES 24 CLEAR BREAKS ,/pre>