Privacy Policy Cookie Policy Terms and Conditions PL/SQL - Wikipedia

PL/SQL

Da Wikipedia, l'enciclopedia libera.

Il PL/SQL (Procedural Language/Structured Query Language) è un linguaggio di programmazione proprietario per database, Oracle Corporation, procedurale, server-based ed estensione dell'SQL. Linguaggi simili al PL/SQL sono inclusi in altri database management system SQL. La sua sintassi è fortemente simile a quella del linguaggio di programmazione ADA.


Indice

[modifica] Funzionalità

Il PL/SQL supporta le variabili, condizioni, e gestisce le eccezioni. Le implementazioni dalla versione 8 di Oracle RDBMS hanno messo enfasi su l' object-orientation.

Le funzioni SQL sottostanti sono come programmi dichiarativi. Il linguaggio SQL standard —diversamente da alcuni linguaggi di programmazione funzionali— non richiede implementazioni per convertire le chiamate ricorsive in salti. SQL non fornisce prontamente i puntatori alla "prima riga" e al "resto della tabella", e non può eseguire facilmente costrutti come cicli. Il PL/SQL invece, com un linguaggio procedurale Turing-complete, permette agli sviluppatori dei database Oracle di interfacciarsi con il sottostante database in maniera imperativa. Gli statements SQL possono effettuare chiamate inline in modo esplicito alle funzioni PL/SQL, o possono lanciare triggers PL/SQL in caso di predefiniti eventi DML.


Il PL/SQL ha diversi packages predefiniti, i più importanti sono:

DBMS_OUTPUT - per le operazioni di output

DBMS_JOBS - per far lanciare specifiche procedure o funzioni ad un particolare tempo, ad esempio lo scheduling

DBMS_XPLAN - per formattare un output "Explain Plan"

DBMS_SESSION

DBMS_METADATA

In ogni release di Oracle RDBMS, la Oracle Corporation aggiunge packages contenenti nuove funzionalità.

[modifica] Struttura base del codice

I programmi PL/SQL sono strutturati a blocchi. I blocchi hanno questa forma generale:

declare
    -- Blocco di dichiarazione (optional)
begin
   -- Codice da eseguire
exception
   -- Gestione eccezioni(opzionale)
end;
/* Esempi di commenti
multilinea.. */
--commento su singola linea

La sezione DECLARE specifica i tipi di dato della variabili, delle costanti, delle collezioni e i tipi definiti dall'utente.

Il blocco tra BEGIN ed END specifica il codice da eseguire.

Le eccezioni possono essere di due tipi:

  1. eccezioni predefinite
  2. eccezioni definite dall'utente.

I pogrammatori possono lanciare le eccezioni definite dall'utente in modo esplicito con il commando RAISE: RAISE <nome dell'eccezione>

L'Oracle Corporation ha predefinito numerose eccezioni, ad esempio NO_DATA_FOUND, TOO_MANY_ROWS, etc. Ogni eccezione ha un SQL Error Number e un SQL Error Messaggio associato. I programmatori possono accedere a questi dati con le funzioni SQLCODE e SQLERRM.

[modifica] Variabili

La sezione DECLARE definisce le variabili, ed eventualmente le inizializza. Se non inizializzate avranno il loro valore di default, ad esempio null o zero.

Per esempio:

declare
    numero1 number(2);
    numero2 number(2) := 17;
    testo varchar2(12) := 'Ciao Mondo';
begin
    select numero_civico into numero1 from indirizzi where nome='Mario';
end;

Il simbolo := funziona come un operatore di assegnamento, per memorizzare un valore in una variabile.

I tipi di dato più usati sono NUMBER, INTEGER, VARCHAR2, DATE, TIMESTAMP etc.

[modifica] Variabili Numeriche

nome_variabile number(P[,S]) := valore;

Per definire una variabile numerica il programmatore puo usare il tipo NUMBER. In questo caso è anche possibile definire la precisione (P) o la scala (S).


Altri tipi numerici abbastanza comuni sono

dec, decimal, double precision, integer, int, numeric, real, smallint, binary_integer, pls_integer

[modifica] Variabili testuali

nome_variabile varchar(L) := 'Testo';

Per definire una variabile di testuale, si può usare il tipo VARCHAR2, con eventualmente tra parentesi il numero massimo di caratteri.


Altri tipi di variabile testuale includono:

varchar, char, long, raw, long raw, nchar, nchar2

[modifica] Variabili booleane

nome_variabile boolean:= true;

Le variabili booleane possono avere i seguenti valori TRUE, FALSE o NULL.

[modifica] Variabili temporali

nome_variabile date := '01-Gen-2005';

I programamtori possono definire una variabile di tipo data usando il tipo DATE. Il DBMS Oracle fornisce la funzione "to_date" per convertire le stringhe in date. Ad esempio: "to_date('31-12-2004','dd-mm-yyyy'))"

Per convertire le date in testo si può usare la funzione "to_char ( date, format_string ).

[modifica] Tipi di dati per specifiche colonne

Nome_variabile nome_tabella.nome_colonna%type;

Questa sintassi definisce una variabile dello stesso tipo della colonna a cui si riferisce nella dichiarazione.

[modifica] Tipi dato definiti dall'utente

I programmatori possono definire tipi di dato con la seguente sintassi:

"type data_type is record(field_1 type_1 :=xyz, field_2 type_2 :=xyz, ..., field_n type_n :=xyz);"

Per esempio:

declare
    type t_indirizzo is record(
        nome indirizzi.nome%type,
        via indirizzi.via%type,
        numero_civico indirizzi.numero_civico%type,
        codice_postale indirizzi.codice_postale%type);
    v_indirizzo t_indirizzo;
begin
    select nome, via, numero_civico, codice_postale into v_indirizzo from indirizzi where rownum = 1;
end;

Questo semplice programma definisce il proprio tipo di dato, t_indirizzo, il quale contiene dei campi nome, via, numero_civico e codice_postale.

Usando questi tipi di dato il programmatore ha definito una variabile chiamata v_indirizzo ed ha prelevato il suo valore dalla tabella INDIRIZZI.

I programmatori possono richiamare i singoli attributi, come in una struct, attraverso la dot-notation, ad esempio:

"v_indirizzo.via := 'Via Rossi';"


[modifica] Linguaggi simili

Anche altri DBMS hanno dei linguaggi associati. Sybase e il suo derivato Microsoft SQL Server hanno Transact-SQL, PostgreSQL ha PL/pgSQL (che cerca di emulare PL/SQL), DB2 include SQL Procedural Language (SQL PL) e MySQL ha una versione di SQL molto simile a PL/SQL.

PL/SQL assomiglia da vicino al Pascal. La struttura a packages alla struttura base del Pascal, o alle unità Delphi.

Il PL/SQL permette anche di definire classi e instanziarle come oggetti, questo lo rende simile ai linguaggi di programmazione orientati agli oggetti. In PL/SQL una classe è chiamata Advance Data Type (ADT), è definita come un tipo SQL Oracle, diversamente dai tipi definiti dall'utente, permettendo di usarli sia in SQL che in PL/SQL. Il costruttore e i metodi sono scritti in PL/SQL. L'oggetto può essere salvato in una colonna di database Oracle.

[modifica] Riferimenti

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu