Rimuovere una Procedura o una Funzione Da un Database
Durante lo sviluppo di strumenti che interagiscono con varie piattaforme DBMS, le sottili differenze nella sintassi e nel supporto delle funzionalità possono rappresentare una sfida. Un caso in particolare riguarda come eliminare le definizioni di stored procedure, poiché il supporto SQL e le convenzioni variano tra i sistemi.
Questo articolo esplora la sintassi e il comportamento del comando DROP per le stored procedure attraverso i popolari sistemi di gestione di database relazionali (RDBMS), aiutando gli sviluppatori a comprendere quali istruzioni sono supportate e come utilizzarle correttamente.
Vengono considerati esclusivamente i DBMS relazionali.
PostgreSQL
In PostgreSQL è possibile creare 2 tipi di funzioni: normali e aggregate. Le procedure sono disponibili dalla versione 11, rilasciata alla fine del 2018. Le funzioni, comprese quelle aggregate, sono disponibili nelle versioni precedenti.
Utilizzando l’istruzione DROP ROUTINE, è possibile rimuovere qualsiasi funzione o procedura. La sintassi della query:
DROP ROUTINE function_or_procedure_name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
Ad esempio:
DROP ROUTINE my_function(INTEGER, INTEGER)
È possibile che funzioni e procedure condividano lo stesso nome, ma abbiano argomenti differenti. La creazione di una funzione con lo stesso nome è denominata overloading della funzione. Per eliminare ogni ambiguità durante la rimozione di procedure o funzioni, è necessario specificare gli argomenti. Se la funzione o la procedura non è sovraccaricata, allora non è necessario specificare i tipi di argomento al momento della rimozione:
DROP ROUTINE function_or_procedure_name
Esistono istruzioni separate per rimuovere, rispettivamente, funzioni aggregate, funzioni normali e procedure:
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
La sintassi di queste istruzioni è la stessa del comando DROP ROUTINE.
Le istruzioni DROP ROUTINE e DROP PROCEDURE sono state introdotte con la versione 11. Le istruzioni DROP AGGREGATE e DROP FUNCTION vengono utilizzate per rimuovere funzioni nelle versioni precedenti.
ORACLE
La seguente istruzione viene utilizzata per rimuovere le procedure in Oracle:
DROP PROCEDURE procedure_name
L’istruzione analoga viene utilizzata per rimuovere le funzioni:
DROP FUNCTION function_name
Ad esempio:
DROP PROCEDURE my_procedure;
Le funzioni e le procedure possono essere autonome oppure possono essere create all’interno di una raccolta tramite un package. La rimozione di funzioni e procedure contenute in un package è possibile soltanto eliminando o ridefinendo il package.
Le funzioni e le procedure autonome non possono essere sovraccaricate, pertanto non è necessario specificare i tipi di argomento al momento della rimozione.
MySQL and MariaDB
La seguente istruzione viene utilizzata per rimuovere le procedure in MySQL e MariaDB:
DROP PROCEDURE procedure_name
L’istruzione analoga viene utilizzata per rimuovere le funzioni:
DROP FUNCTION function_name
MySQL e MariaDB non supportano il sovraccarico di procedure o funzioni; pertanto, viene specificato soltanto il nome.
Dalla versione 10.3.3 (23 dicembre 2017) è possibile creare funzioni aggregate in MariaDB. Le funzioni aggregate vengono rimosse come quelle normali utilizzando l’istruzione DROP FUNCTION.
SQLite
SQLite non supporta la creazione di procedure e funzioni, pertanto non esiste un’istruzione per rimuoverle.
MS SQL Server
Le seguenti istruzioni vengono utilizzate per rimuovere procedure, funzioni normali e funzioni aggregate in MS SQL:
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
DROP AGGREGATE aggregate_function_name
MS SQL non supporta il sovraccarico di procedure e funzioni; pertanto, al momento della rimozione viene specificato solo il nome.
Diversamente dalle procedure e dalle funzioni normali, le funzioni aggregate in MS SQL fanno riferimento esclusivamente ad un’implementazione esterna.
Netezza
Le seguenti istruzioni vengono utilizzate per rimuovere procedure, funzioni normali e funzioni aggregate in Netezza:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
Netezza supporta il sovraccarico di funzioni e procedure; pertanto, i tipi di argomento sono necessari.
Diversamente dalle procedure, le funzioni in Netezza fanno riferimento esclusivamente ad un’implementazione esterna.
Informix
Le seguenti istruzioni vengono utilizzate per rimuovere procedure, funzioni normali e funzioni aggregate in Informix:
DROP PROCRDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name
dove:
- argument_types – tipi di argomento separati da una virgola.
Non è necessario specificare i tipi di argomento per le funzioni aggregate.
È possibile sovraccaricare le procedure; pertanto, più procedure possono avere lo stesso nome. Per distinguerle, è possibile assegnare alla procedura un nome univoco al momento della creazione. Ciò vale anche per le funzioni normali. Un nome univoco può essere utilizzato per rimuovere le procedure e le funzioni normali con le seguenti istruzioni:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_normal_function_name
Se una procedura o una funzione normale non è sovraccaricata, non è necessario specificare i tipi di argomento al momento della rimozione:
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
La seguente istruzione consente di rimuovere una procedura o una funzione normale:
DROP ROUTINE name(argument_types)
oppure, nel caso in cui non vi siano sovraccarichi:
DROP ROUTINE name
Questa istruzione è utile quando non si sa se rimuovere una procedura o una funzione.
Inoltre, un nome univoco può essere utilizzato per la rimozione:
DROP SPECIFIC ROUTINE unique_name
IBM Db2
Le seguenti istruzioni vengono utilizzate per rimuovere procedure e funzioni in IBM Db2:
DROP PROCEDURE procedure_name(argument_types)
DROP PROCEDURES function_name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
Le procedure possono essere sovraccaricate; pertanto, più procedure possono avere lo stesso nome. Per distinguerle, è possibile assegnare un valore univoco al momento della creazione della procedura. Ciò vale anche per le funzioni. Un nome univoco può essere utilizzato per rimuovere procedure e funzioni tramite le seguenti istruzioni:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_function_name
Se una procedura o una funzione non è sovraccaricata, non è necessario specificare i tipi di argomento al momento della rimozione:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
AWS Athena
Athena non supporta la creazione di procedure e funzioni; pertanto, non vi è la possibilità di rimuoverle.
Teradata
Le seguenti istruzioni vengono utilizzate per rimuovere procedure e funzioni in Teradata:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
Teradata consente il sovraccarico di una funzione (ma non di una procedura). In un’istruzione CREATE FUNCTION, oltre al nome della funzione, è necessario specificare un nome univoco della funzione durante il sovraccarico. Utilizzando un nome univoco, è possibile rimuovere una funzione con l’aiuto della seguente istruzione:
DROP SPECIFIC FUNCTION unique_function_name
Se una funzione non è sovraccaricata, è possibile non specificare i tipi di argomento al momento della rimozione:
DROP FUNCTION function_name
Teradata supporta i macro, che sono in qualche modo simili alle procedure. La seguente istruzione viene utilizzata per rimuovere i macro:
DROP MACRO macro_name
Vertica
Vertica consente la creazione di nuove procedure (istruzione CREATE PROCEDURE), che fanno riferimento a un file eseguibile esterno. Le stored procedure non sono supportate.
La seguente istruzione viene utilizzata per rimuovere le procedure:
DROP PROCEDURE procedure_name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
Le procedure possono essere sovraccaricate. I tipi di argomento sono necessari anche se la procedura non è sovraccaricata.
Vertica supporta numerosi tipi di funzioni:
- Aggregate functions (CREATE AGGREGATE)
- Analytical functions (CREATE ANALITIC FUNCTION)
- Load filter functions (CREATE FUNCTION)
- Load parser functions (CREATE PARSER)
- Load source functions (CREATE SOURCE)
- Transformation functions (CREATE TRANSFORM FUNCTION)
- Scalar functions (CREATE FUNCTION)
- SQL-functions (CREATE FUNCTION)
Vi sono istruzioni tra parentesi che aiutano a creare funzioni.
Tutte le funzioni tranne le SQL-functions hanno un’implementazione esterna, ovvero fanno riferimento a una libreria dinamica esterna.
Le SQL-functions sono memorizzate in un database, ma possono utilizzare soltanto query semplici.
Esiste un’istruzione per rimuovere le funzioni per ciascun tipo di funzione, ad eccezione di quelle analitiche.
DROP AGGREGATE FUNCTION name(argument_types)
DROP FILTER name()
DROP SOURCE name()
DROP PARSER name()
DROP TRANSFORM FUNCTION name(argument_types)
DROP FUNCTION name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
Qualsiasi funzione può essere rimossa tramite l’istruzione DROP FUNCTION, ad eccezione delle funzioni aggregate e di trasformazione. Le funzioni possono essere sovraccaricate, pertanto, per rimuoverle è necessario specificare i tipi di argomento. Essi sono richiesti anche se la funzione non è sovraccaricata.
SAP HANA
Le seguenti istruzioni vengono utilizzate per rimuovere procedure e funzioni in SAP HANA:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
Il sovraccarico di funzioni e procedure non è supportato; pertanto, al momento della rimozione viene specificato soltanto il nome.
Apache Impala
Impala permette la creazione di funzioni (scalari e aggregate) con un’implementazione esterna. Le funzioni scalari possono essere implementate in C++ e Java, mentre le funzioni aggregate solo in C++.
La seguente istruzione viene utilizzata per rimuovere le funzioni aggregate:
DROP AGGREGATE FUNCTION function_name(argument_types)
dove:
- argument_types – tipi di argomento separati da una virgola.
L’istruzione per rimuovere una funzione scalare dipende dall’implementazione del linguaggio.
La seguente istruzione viene utilizzata per rimuovere una funzione scalare in C++:
DROP FUNCTION scalar_function_name(arguments_types)
La seguente istruzione viene utilizzata per rimuovere una funzione scalare in Java:
DROP FUNCTION scalar_function_name
Impala permette il sovraccarico delle funzioni; pertanto, è necessario specificare i tipi di argomento al momento della rimozione. Le funzioni Java sono sovraccaricate da Java stesso; per questo motivo, gli argomenti non devono essere specificati.
HPL/SQL offre maggiori possibilità per l’utilizzo di procedure e funzioni.
Apache Hive
Hive consente la creazione di funzioni con un’implementazione esterna in Java. Le funzioni possono essere temporanee o permanenti. Le funzioni temporanee esistono solo nella sessione corrente.
La seguente istruzione viene utilizzata per rimuovere le funzioni permanenti:
DROP FUNCTION function_name
La seguente istruzione viene utilizzata per rimuovere le funzioni temporanee:
DROP TEMPORARY FUNCTION function_name
Hive consente la creazione di macro temporanei che possono contenere espressioni semplici. La seguente istruzione viene utilizzata per rimuovere i macro:
DROP TEMPORARY MACRO macro_name
HPL/SQL offre maggiori possibilità per l’utilizzo di procedure e funzioni.
Documentazione per differenti DBMS: