PL/SQL: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nallimbot (discussione | contributi)
m Bot: Aggiungo: zh:PL-SQL
WP:SINTASSI: formattazione
Riga 1:
Il '''PL/SQL (Procedural <nowiki>Language/Structured</nowiki> 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 (linguaggio)|Ada]].
 
==Funzionalità==
 
Il PL/SQL supporta le [[variabile|variabili]], [[condizioni]], e gestisce le [[Eccezione (informatica)|eccezioni]]. Le implementazioni dalla versione 8 di [[Oracle]] [[RDBMS]] hanno messo enfasi su l'[[objectProgrammazione orientationorientata |agli oggetti|object-orientation]].
 
Le funzioni SQL sottostanti sono come programmi dichiarativi.
Il linguaggio SQL standard &mdash;diversamente da alcuni linguaggi di programmazione funzionali&mdash; 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 equivalenza|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 [[Data Manipulation Language]] (DML).
 
<!--
Line 15 ⟶ 16:
-->
 
<p><p> Il PL/SQL ha diversi packages predefiniti, i più importanti sono:
<p>* DBMS_OUTPUT - per le operazioni di output
<P>* DBMS_JOBS - per far lanciare specifiche procedure o funzioni ad un particolare tempo, ad esempio lo scheduling
<P>* DBMS_XPLAN - per formattare un output "Explain Plan"
<P>* DBMS_SESSION
<P>* DBMS_METADATA
 
 
<p> In ogni release di Oracle RDBMS, la Oracle Corporation aggiunge packages contenenti nuove funzionalità.
 
== Struttura base del codice ==
Riga 50:
:<font style="color:#006400">--commento su singola linea</font>
 
<p>La sezione DECLARE specifica i tipi di dato delle variabili, delle costanti, delle collezioni e i tipi definiti dall'utente.
 
<p>Il blocco tra BEGIN ed END specifica il codice da eseguire.
<p>Le eccezioni possono essere di due tipi:
 
<p>Le eccezioni possono essere di due tipi:
# eccezioni predefinite
# eccezioni definite dall'utente.
 
<p> I programmatori possono lanciare le eccezioni definite dall'utente in modo esplicito con il commando RAISE:
RAISE <nome dell'eccezione>
 
<p> L'Oracle Corporation ha predefinito numerose eccezioni, ad esempio NO_DATA_FOUND, TOO_MANY_ROWS, etc.
<code>RAISE <nome dell'eccezione></code>
 
<p> 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 Message associato. I programmatori possono accedere a questi dati con le funzioni SQLCODE e SQLERRM.
 
Line 82 ⟶ 87:
|}
 
Il simbolo <nowikicode>:=</nowikicode>= funziona come un operatore di assegnamento, per memorizzare un valore in una variabile.
 
<p> I tipi di dato più usati sono NUMBER, INTEGER, VARCHAR2, DATE, TIMESTAMP etc.
 
=== Variabili Numerichenumeriche ===
nome_variabile <font style="color:#FF0000">number</font><font style="color:#0000FF">(</font><font style="color:#8B4513">P,[S]</font><font style="color:#0000FF">) := </font><font style="color:#FF0000">valore</font><font style="color:#0000FF">;</font>
 
Per definire una variabile numerica il programmatore può usare il tipo NUMBER.
In questo caso è anche possibile definire la precisione (P) e la scala (S). La precisione indica quanti numeri saranno utilizzati per rappresentare il numero. La scala indica quanti numeri sono decimali. Per esempio, 3,1416 è composto da una precisione 5 e una scala 4.
 
 
Altri tipi numerici abbastanza comuni sono
Line 100 ⟶ 104:
 
Per definire una variabile di tipo testuale, si può usare il tipo VARCHAR2, con eventualmente tra parentesi il numero massimo di caratteri.
 
 
Altri tipi di variabile testuale includono:
Line 161 ⟶ 164:
I programmatori possono richiamare i singoli attributi, come in una struct, attraverso la dot-notation, ad esempio:
 
''"<code>v_indirizzo.via := 'Via Rossi';"''</code>
 
 
==Linguaggi simili==
Anche altri DBMS hanno dei linguaggi associati. [[Sybase SQL Server|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 (<ref>[http://publib.boulder.ibm.com/infocenter/db2help/index.jsp?topic=/com.ibm.db2.udb.doc/ad/c0011916.htm SQL PL]</ref>) e [[MySQL]] ha una versione di SQL molto simile a PL/SQL.
 
PL/SQL assomiglia da vicino al [[Pascal (linguaggio)|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.
 
==Note==
<references/>
 
==Bibliografia==