Come Rimuovere una Procedura o una Funzione da un Database
Deve considerare molte sfumature durante lo sviluppo di strumenti che interagiscono con vari DBMS, perché le stesse cose potrebbero essere implementate in modi diversi e uno standard SQL potrebbe essere supportato in modi diversi, anch’esso.
Quando si considerano un numero sufficiente di DBMS, risulta che non esiste un metodo universale per rimuovere una funzione o una procedura.
Sono considerati solo i DBMS relazionali in questo articolo.
PostgreSQL
È possibile creare 2 tipi di funzioni in PostgreSQL: normali e aggregate. Le procedure possono essere create a partire dalla versione 11 rilasciata alla fine del 2018. Le funzioni, comprese le funzioni aggregate, sono disponibili nelle versioni precedenti.
Utilizzando un’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 argomenti separati da una virgola.
Per esempio:
DROP ROUTINE my_function(INTEGER, INTEGER)
Potrebbe esserci funzioni e procedure con lo stesso nome ma con argomenti diversi. Creare una funzione con lo stesso nome è chiamato sovraccarico di funzione. Per eliminare l’ambiguità durante la rimozione di procedure o funzioni, è necessario specificare gli argomenti. Se la funzione o la procedura non è sovraccaricata, non è necessario specificare i tipi di argomenti mentre viene rimossa:
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 di DROP ROUTINE’s.
Le dichiarazioni DROP ROUTINE e DROP PROCEDURE e le procedure sono emerse nella versione 11. Le istruzioni DROP AGGREGATE e DROP FUNCTION sono utilizzate per rimuovere funzioni nelle versioni precedenti.
ORACLE
L’istruzione successiva viene utilizzata per rimuovere le procedure in Oracle:
DROP PROCEDURE procedure_name
L’istruzione simile alla precedente viene utilizzata per rimuovere le funzioni:
DROP FUNCTION function_name
Per esempio:
DROP PROCEDURE my_procedure;
Le funzioni e le procedure possono essere autonome o possono essere create in una raccolta utilizzando un pacchetto. Per rimuovere funzioni e procedure dal pacchetto è possibile solo tramite la rimozione o la ridefinizione del pacchetto.
Le funzioni e le procedure autonome non possono essere sovraccaricate, quindi non è necessario specificare i tipi di argomenti durante la rimozione.
MySQL e MariaDB
L’istruzione successiva viene utilizzata per rimuovere le procedure in MySQL e MariaDB:
DROP PROCEDURE procedure_name
L’istruzione simile alla precedente viene utilizzata per rimuovere le funzioni:
DROP FUNCTION function_name
MySQL e MariaDB non supportano il sovraccarico di procedure o funzioni; pertanto, è specificato solo un nome.
Dalla versione 10.3.3 (23 dicembre 2017) è possibile creare funzioni aggregate in MariaDB. Le funzioni aggregate vengono rimosse come funzioni normali utilizzando l’istruzione DROP FUNCTION.
SQLite
SQLite non supporta la creazione di procedure e funzioni, quindi non esiste un’istruzione per rimuoverle.
MS SQL Server
Le istruzioni seguenti 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; quindi, mentre le rimuove è specificato solo il nome.
Al contrario di procedure e funzioni normali, le funzioni aggregate in MS SQL si riferiscono solo a un’implementazione esterna.
Netezza
Le istruzioni seguenti 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 argomenti separati da una virgola.
Netezza supporta il sovraccarico di funzioni e procedure; pertanto, i tipi di argomenti sono necessari. Al contrario delle procedure, le funzioni in Netezza si riferiscono solo a un’implementazione esterna.
Informix
Le istruzioni seguenti 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 argomenti separati da una virgola.
Non è necessario specificare i tipi di argomenti per le funzioni aggregate.
È possibile sovraccaricare le procedure; pertanto, poche procedure possono avere lo stesso nome. Per distinguerle è possibile dare un nome univoco a una procedura durante la creazione. Questo è vero anche per le funzioni normali. Un nome univoco può essere utilizzato per rimuovere procedure e funzioni normali nelle istruzioni seguenti:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_normal_function_name
Se una procedura o una funzione normale non ha sovraccarico, allora non è necessario specificare i tipi di argomenti quando la si rimuove.
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
L’istruzione successiva prevede la rimozione di una procedura o di una funzione normale:
DROP ROUTINE name(argument_types)
o nel caso in cui non ci siano sovraccarichi:
DROP ROUTINE name
Questa istruzione è utile quando non è noto cosa deve essere rimosso – una procedura o una funzione.
Inoltre, è possibile utilizzare un nome univoco per la rimozione:
DROP SPECIFIC ROUTINE unique_name
IBM Db2
Le istruzioni seguenti 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 argomenti separati da una virgola.
Le procedure possono essere sovraccaricate; pertanto, poche procedure possono avere lo stesso nome. Per definirle è possibile impostare un valore univoco durante la creazione di una procedura. Questo è vero anche per le funzioni. Un nome univoco può essere utilizzato per rimuovere procedure e funzioni tramite le istruzioni seguenti:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_function_name
Se una procedura o una funzione non ha sovraccarichi, non è necessario specificare i tipi di argomenti mentre la si rimuove:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
AWS Athena
Athena non supporta la creazione di procedure e funzioni; pertanto, non è possibile rimuoverle.
Teradata
Le istruzioni seguenti vengono utilizzate per rimuovere procedure e funzioni in Teradata:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name(argument_types)
dove:
- argument_types – tipi di argomenti separati da una virgola.
Teradata consente di sovraccaricare una funzione (ma non una procedura). In un’istruzione CREATE FUNCTION oltre a un nome di funzione, è necessario specificare un nome univoco della funzione durante il sovraccarico. Utilizzando un nome univoco, è possibile rimuovere una funzione con l’aiuto dell’istruzione seguente:
DROP SPECIFIC FUNCTION unique_function_name
Se una funzione non ha sovraccarichi, è possibile non specificare i tipi di argomenti quando la si rimuove:
DROP FUNCTION function_name
Teradata supporta macro che somigliano a procedure. L’istruzione seguente viene utilizzata per rimuovere macro:
DROP MACRO macro_name
Vertica
Vertica prevede la creazione di nuove procedure (istruzione CREATE PROCEDURE), che si riferiscono a un file eseguibile esterno. Le procedure memorizzate non sono supportate.
L’istruzione seguente viene utilizzata per rimuovere le procedure:
DROP PROCEDURE procedure_name(argument_types)
dove:
- argument_types – tipi di argomenti separati da una virgola.
Le procedure possono essere sovraccaricate. Sono necessari i tipi di argomenti anche se la procedura non ha sovraccarichi.
Vertica supporta molti tipi di funzioni:
- Funzioni aggregate (CREATE AGGREGATE)
- Funzioni analitiche (CREATE ANALITIC FUNCTION)
- Funzioni filtro di caricamento (CREATE FUNCTION)
- Funzioni parser di caricamento (CREATE PARSER)
- Funzioni sorgente di caricamento (CREATE SOURCE)
- Funzioni di trasformazione (CREATE TRANSFORM FUNCTION)
- Funzioni scalari (CREATE FUNCTION)
- SQL-funzioni (CREATE FUNCTION)
Esistono istruzioni tra parentesi che aiutano a creare le funzioni.
Tutte le funzioni eccetto SQL-funzioni hanno un’implementazione esterna, cioè fanno riferimento a una libreria dinamica esterna.
Le SQL-funzioni sono memorizzate in un database ma possono utilizzare solo query semplici.
Esiste un’istruzione per rimuovere le funzioni per ciascun tipo di funzioni, eccetto 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 argomenti separati da una virgola.
Qualsiasi funzione può essere rimossa da un’istruzione DROP FUNCTION, eccetto le funzioni aggregate e di trasformazione. Le funzioni possono essere sovraccaricate, quindi, per rimuoverle è necessario specificare i tipi di argomenti. Sono necessari anche se la funzione non ha sovraccarichi.
SAP HANA
Le istruzioni seguenti 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, è specificato solo un nome quando le si rimuovono.
Apache Impala
Impala consente la creazione di una funzione (scalare e aggregata) con un’implementazione esterna. Le funzioni scalari possono essere implementate in C++ e Java. Gli aggregati fanno solo C++. L’istruzione seguente viene utilizzata per rimuovere le funzioni aggregate:
DROP AGGREGATE FUNCTION function_name(argument_types)
dove:
- argument_types – tipi di argomenti separati da una virgola.
L’istruzione per rimuovere una funzione scalare dipende da un’imp lementazione del linguaggio.
L’istruzione seguente viene utilizzata per rimuovere una funzione scalare in C++:
DROP FUNCTION scalar_function_name(arguments_types)
L’istruzione seguente viene utilizzata per rimuovere una funzione scalare in Java:
DROP FUNCTION scalar_function_name
Impala consente il sovraccarico delle funzioni; pertanto, è necessario specificare i tipi di argomenti quando le si rimuove. Le funzioni Java sono sovraccaricate da Java stesso, per questa ragione, non è necessario specificare gli argomenti.
HPL/SQL offre maggiori opportunità per l’utilizzo di procedure e funzioni.
Apache Hive
Hive consente di creare funzioni con un’implementazione esterna in Java. Le funzioni possono essere temporanee o permanenti. Le funzioni temporanee esistono solo nella sessione corrente.
L’istruzione seguente viene utilizzata per rimuovere le funzioni permanenti:
DROP FUNCTION function_name
L’istruzione seguente viene utilizzata per rimuovere le funzioni temporanee:
DROP TEMPORARY FUNCTION function_name
Hive consente di creare macro temporanee che possono contenere espressioni semplici. L’istruzione seguente viene utilizzata per rimuovere le macro:
DROP TEMPORARY MACRO macro_name
HPL/SQL offre maggiori opportunità per l’utilizzo di procedure e funzioni.
Diverse documentazioni DBMS: