PL/SQL: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
No2 (discussione | contributi) m Fix link |
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti. |
||
(31 versioni intermedie di 25 utenti non mostrate) | |||
Riga 1:
{{Linguaggio di programmazione
|nome = PL/SQL
|immagine = <!-- Solo nome file -->
|didascalia =
|autore = [[Oracle Corporation]]
|data = [[1991]]
|versione =
|utilizzo = [[query language|linguaggio di interrogazione]] per [[database]] <!-- Ambito di utilizzo specifico: linguaggio general-purpose, interrogazione database, ecc. -->
|paradigmi = [[Programmazione procedurale]] <!-- Programmazione procedurale, a oggetti, generica, ecc. -->
|tipizzazione = [[Tipizzazione forte|Forte]] <!-- Forte, debole... -->
|specifiche =
|estensione = <!-- Estensioni comuni dei file sorgenti -->
|influenzato_da = [[Pascal (linguaggio di programmazione)|Pascal]], [[Ada (linguaggio di programmazione)|Ada]]<!-- Lista di linguaggi che hanno influenzato il linguaggio in esame, citare le fonti -->
|ha_influenzato = <!-- Lista di linguaggi influenzati dal linguaggio in esame, citare le fonti -->
|implementazione_riferimento = <!-- Implementazione di riferimento: compilatore o interprete? -->
|sistema_operativo = [[multipiattaforma]] <!-- S.O. supportati dall'impl. di riferimento -->
|lingua = <!-- Lingue supportate dall'impl. di riferimento -->
|licenza = [[Software proprietario|proprietaria]] <!-- Licenza del codice sorgente o binario dell'impl. di riferimento -->
|sito_web =
}}
In [[informatica]] il '''PL/SQL''' ('''Procedural Language/Structured Query Language''') è un [[linguaggio di programmazione]] proprietario (per [[database]] di [[Oracle Corporation]]), [[Programmazione procedurale|procedurale]], server-based, estensione dell'[[SQL]].<ref>{{Cita web |url=https://www.oracle.com/it/database/technologies/appdev/plsql.html |titolo=PL/SQL eredita robustezza, sicurezza e portabilità dei database |accesso=1 novembre 2024}}</ref> Linguaggi simili al PL/SQL sono inclusi in altri [[database management system]] SQL. La [[sintassi]] è fortemente simile a quella del linguaggio di programmazione [[Ada (linguaggio)|Ada]].
==Funzionalità==
Il PL/SQL supporta le [[variabile (informatica)|variabili]],
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.cSQL 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, come 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).
Il PL/SQL ha diversi packages predefiniti, i più importanti sono:
* <code>DBMS_OUTPUT</code>
* <code>DBMS_JOBS</code>
* <code>DBMS_XPLAN</code>
* <code>DBMS_SESSION</code>
* <code>DBMS_METADATA</code>
Line 29 ⟶ 44:
I programmi PL/SQL sono strutturati a blocchi. I blocchi hanno questa forma generale:
<
declare
-- Blocco di dichiarazione (opzionale)
Line 41 ⟶ 56:
multilinea.. */
--commento su singola linea
</syntaxhighlight>
La sezione
Il blocco tra <code>BEGIN</code> ed <code>END</code> specifica il codice da eseguire.
Line 53 ⟶ 68:
I programmatori possono lanciare le eccezioni definite dall'utente in modo esplicito con il commando <code>RAISE</code>:
<
L'Oracle Corporation ha predefinito numerose eccezioni, ad esempio NO_DATA_FOUND, TOO_MANY_ROWS, ecc.
Line 64 ⟶ 79:
Per esempio:
<
declare
numero1 number(2);
Line 72 ⟶ 87:
select numero_civico into numero1 from indirizzi where nome='Mario';
end;
</syntaxhighlight>
Il simbolo <code>:=</code> funziona come un [[operatore di assegnamento]], per memorizzare un valore in una variabile.
I tipi di dato più usati sono <code>NUMBER</code>, <code>INTEGER</code>, <code>VARCHAR2</code>, <code>DATE</code>, <code>TIMESTAMP</code> ecc.
=== Variabili numeriche ===
<
Per definire una variabile numerica il programmatore può usare il tipo <code>NUMBER</code>.
Line 88 ⟶ 103:
=== Variabili testuali ===
<
Per definire una variabile di tipo testuale, si può usare il tipo <code>VARCHAR2</code>, con eventualmente tra parentesi il numero massimo di caratteri.
Line 96 ⟶ 111:
=== Variabili booleane ===
<
Le variabili booleane possono avere i seguenti valori <code>TRUE</code>, <code>FALSE</code> o <code>NULL</code>.
=== Variabili temporali ===
<
I programmatori possono definire una variabile di tipo data usando il tipo <code>DATE</code>.
Il DBMS Oracle fornisce la funzione <code>to_date</code> per convertire le stringhe in date.
Ad esempio: <
Per convertire le date in testo si può usare la funzione <code>to_char ( date, format_string )</code>.
=== Tipi di dati per specifiche colonne ===
<
Questa sintassi definisce una variabile dello stesso tipo della colonna a cui si riferisce nella dichiarazione.
Line 119 ⟶ 134:
I programmatori possono definire tipi di dato con la seguente sintassi:
<
Per esempio:
<
declare
type t_indirizzo is record(
Line 134 ⟶ 149:
select nome, via, numero_civico, codice_postale into v_indirizzo from indirizzi where rownum = 1;
end;
</syntaxhighlight>
Questo semplice programma definisce il proprio tipo di dato, <code>t_indirizzo</code>, il quale contiene dei campi <code>nome</code>, <code>via</code>, <code>numero_civico</code> e <code>codice_postale</code>.
Line 142 ⟶ 157:
I programmatori possono richiamare i singoli attributi, come in una struct, attraverso la dot-notation, ad esempio:
<
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.▼
==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), [[IBM DB2|DB2]] include SQL Procedural Language<ref>
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==
Line 155 ⟶ 170:
==Bibliografia==
* {{Cita libro|autore=Steven Feuerstein|autore2=Bill Pribyl|titolo=Oracle PL/SQL programming|anno=2002|url=https://archive.org/details/oracleplsqlprogr00feue|edizione=3ª ed.|data=2002|editore=O'Reilly Media|ISBN=978-0-596-00381-4}}
* [http://www.postgresql.org/docs/8.0/interactive/plpgsql.html PL/pgSQL - SQL Procedural Language]▼
==Collegamenti esterni==
* {{Collegamenti esterni}}
* [http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html MySQL Stored Procedures and Functions]▼
▲*
*
▲*
{{Controllo di autorità}}
{{Portale|informatica}}
[[Categoria:Linguaggi di interrogazione]]
[[Categoria:Linguaggi di programmazione]]
|