PL/SQL: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
LauBot (discussione | contributi)
m Bot: passaggio degli url da HTTP a HTTPS
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti.
 
(11 versioni intermedie di 9 utenti non mostrate)
Riga 21:
}}
 
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à==
Riga 44:
I programmi PL/SQL sono strutturati a blocchi. I blocchi hanno questa forma generale:
 
<sourcesyntaxhighlight lang="plsql">
declare
-- Blocco di dichiarazione (opzionale)
Riga 56:
multilinea.. */
--commento su singola linea
</syntaxhighlight>
</source>
 
La sezione<code>DECLARE</code>specifica i [[Tipo di dato|tipi di dato]] delle variabili, delle costanti, delle collezioni e i tipi definiti dall'utente.
 
Il blocco tra <code>BEGIN</code> ed <code>END</code> specifica il codice da eseguire.
Riga 68:
I programmatori possono lanciare le eccezioni definite dall'utente in modo esplicito con il commando <code>RAISE</code>:
 
<sourcesyntaxhighlight lang="plsql">RAISE <nome_dell_eccezione></sourcesyntaxhighlight>
 
L'Oracle Corporation ha predefinito numerose eccezioni, ad esempio NO_DATA_FOUND, TOO_MANY_ROWS, ecc.
Riga 79:
Per esempio:
 
<sourcesyntaxhighlight lang="plsql">
declare
numero1 number(2);
Riga 87:
select numero_civico into numero1 from indirizzi where nome='Mario';
end;
</syntaxhighlight>
</source>
 
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 ===
<sourcesyntaxhighlight lang="plsql">nome_variabile number(P,[S]) := valore;</sourcesyntaxhighlight>
 
Per definire una variabile numerica il programmatore può usare il tipo <code>NUMBER</code>.
Riga 103:
 
=== Variabili testuali ===
<sourcesyntaxhighlight lang="plsql">nome_variabile varchar2(L) := 'Testo';</sourcesyntaxhighlight>
 
Per definire una variabile di tipo testuale, si può usare il tipo <code>VARCHAR2</code>, con eventualmente tra parentesi il numero massimo di caratteri.
Riga 111:
 
=== Variabili booleane ===
<sourcesyntaxhighlight lang="plsql">nome_variabile boolean := true;</sourcesyntaxhighlight>
 
Le variabili booleane possono avere i seguenti valori <code>TRUE</code>, <code>FALSE</code> o <code>NULL</code>.
 
=== Variabili temporali ===
<sourcesyntaxhighlight lang="plsql">nome_variabile date := '01-Gen-2005';</sourcesyntaxhighlight>
 
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: <sourcesyntaxhighlight lang="plsql">to_date('31-12-2004','dd-mm-yyyy')</sourcesyntaxhighlight>
 
Per convertire le date in testo si può usare la funzione <code>to_char ( date, format_string )</code>.
 
=== Tipi di dati per specifiche colonne ===
<sourcesyntaxhighlight lang="plsql">Nome_variabile nome_tabella.nome_colonna%type;</sourcesyntaxhighlight>
 
Questa sintassi definisce una variabile dello stesso tipo della colonna a cui si riferisce nella dichiarazione.
Riga 134:
I programmatori possono definire tipi di dato con la seguente sintassi:
 
<sourcesyntaxhighlight lang="plsql">type data_type is record(field_1 type_1 :=xyz, field_2 type_2 :=xyz, ..., field_n type_n :=xyz);</sourcesyntaxhighlight>
Per esempio:
 
<sourcesyntaxhighlight lang="plsql">
declare
type t_indirizzo is record(
Riga 149:
select nome, via, numero_civico, codice_postale into v_indirizzo from indirizzi where rownum = 1;
end;
</syntaxhighlight>
</source>
 
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>.
Riga 157:
I programmatori possono richiamare i singoli attributi, come in una struct, attraverso la dot-notation, ad esempio:
 
<sourcesyntaxhighlight lang="plsql">v_indirizzo.via := 'Via Rossi';</sourcesyntaxhighlight>
 
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>[{{cita web |url=https://publib.boulderwww.ibm.com/infocenterdocs/db2helpen/indexdb2/11.jsp1?topic=/com.ibm.db2.udb.doc/ad/c0011916.htmdata-sql-pl-support |titolo=SQL Procedural Language (SQL PL]) |accesso=1 novembre 2024}}</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]].
Riga 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}}
* Steven Feuerstein (2002). ''Oracle PL/SQL Programming'', 3rd ed. O'Reilly & Associates. ISBN 0596003811. (Many consider this book the "bible" of PL/SQL development)
 
==Collegamenti esterni==
* {{Collegamenti esterni}}
* {{cita web|https://www.postgresql.org/docs/8.0/interactive/plpgsql.html|PL/pgSQL - SQL Procedural Language|lingua=en}}
* {{cita web|httpurl=https://www.orafaqpostgresql.comorg/wikidocs/PL8.0/SQL_FAQinteractive/plpgsql.html|Oracle titolo=PL/pgSQL - SQL FAQProcedural Language|lingua=en}}
* {{cita web|httpsurl=http://devwww.mysqlorafaq.com/docwiki/refmanPL/5.0/en/stored-routines.htmlSQL_FAQ|MySQLtitolo=Oracle Stored Procedures andPL/SQL FunctionsFAQ|lingua=en}}
* {{cita web|url=https://dev.mysql.com/doc/refman/5.0/en/stored-routines.html|titolo=MySQL Stored Procedures and Functions|lingua=en}}
 
{{Controllo di autorità}}