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 differenti e anche uno standard SQL potrebbe essere supportato in modi diversi.
Quando si considera un numero sufficiente di DBMS, si scopre che non esiste un metodo universale per rimuovere una funzione o una procedura.
Nell’articolo sono considerati solo i DBMS relazionali.
PostgreSQL
È possibile creare 2 tipi di funzioni in PostgreSQL: normali e aggregate. Le procedure possono essere create dalla versione 11 rilasciata alla fine del 2018. Le funzioni, incluse quelle 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)
Potrebbero 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 le ambiguità durante la rimozione di procedure o funzioni, gli argomenti devono essere specificati. Se la funzione o la procedura non è sovraccaricata, non è necessario specificare i tipi di argomento mentre viene rimossa:
DROP ROUTINE function_or_procedure_name
Esistono istruzioni separate per rimuovere funzioni aggregate, funzioni normali e procedure rispettivamente:
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
La sintassi di queste istruzioni è la stessa di quella di DROP ROUTINE.
Le istruzioni DROP ROUTINE e DROP PROCEDURE e le procedure sono apparse nella versione 11. Le istruzioni DROP AGGREGATE e DROP FUNCTION sono utilizzate per rimuovere funzioni nelle versioni precedenti.
ORACLE
La seguente istruzione è utilizzata per rimuovere procedure in Oracle:
DROP PROCEDURE procedure_name
Per rimuovere funzioni, si usa un’istruzione simile alla precedente:
DROP FUNCTION function_name
Per esempio:
DROP PROCEDURE my_procedure;
Le funzioni e le procedure possono essere standalone o possono essere create in una collezione usando un package. È possibile rimuovere funzioni e procedure dal package solo tramite rimozione o ridefinizione del package.
Le funzioni e le procedure standalone non possono essere sovraccaricate, quindi non è necessario specificare i tipi di argomento durante la rimozione.
MySQL e MariaDB
La seguente istruzione è utilizzata per rimuovere procedure in MySQL e MariaDB:
DROP PROCEDURE procedure_name
Per rimuovere funzioni si usa un’istruzione simile alla precedente:
DROP FUNCTION function_name
MySQL e MariaDB non supportano il sovraccarico di procedure o funzioni; pertanto, viene specificato solo un nome.
Dalla versione 10.3.3 (23 dicembre 2017) è possibile creare funzioni aggregate in MariaDB. Le funzioni aggregate sono rimosse come quelle 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 seguenti istruzioni sono 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, nella rimozione viene specificato solo il nome.
A differenza delle procedure e delle funzioni normali, le funzioni aggregate in MS SQL si riferiscono solo a un’implementazione esterna.
Netezza
Le seguenti istruzioni sono 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 argomento sono necessari. A differenza delle procedure, le funzioni in Netezza si riferiscono solo a un’implementazione esterna.
Informix
Le seguenti istruzioni sono utilizzate per rimuovere procedure, funzioni normali e funzioni aggregate in Informix:
DROP PROCEDURE 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 argomento per le funzioni aggregate.
È possibile sovraccaricare procedure; pertanto, alcune procedure possono avere lo stesso nome. Per distinguerle, è possibile assegnare un nome univoco alla procedura mentre la si crea. Ciò è vero anche per le funzioni normali. Un nome univoco può essere utilizzato per rimuovere procedure e funzioni normali nelle seguenti istruzioni:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_normal_function_name
Se una procedura o una funzione normale non ha sovraccarichi, allora non è necessario specificare i tipi di argomento quando la si rimuove.
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
La seguente istruzione permette di rimuovere una procedura o una funzione normale:
DROP ROUTINE name(argument_types)
nel caso non vi siano sovraccarichi:
DROP ROUTINE name
Questa istruzione è utile quando non si sa cosa si deve 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 sono utilizzate per rimuovere procedure e funzioni in IBM Db2:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION function_name(argument_types)
dove:
- argument_types – tipi di argomenti separati da una virgola.
Le procedure possono essere sovraccaricate; pertanto, alcune procedure possono avere lo stesso nome. Per definirle è possibile impostare un valore univoco durante la creazione di una procedura. Ciò è vero 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 ha sovraccarichi, allora non è necessario specificare i tipi di argomento 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 c’è possibilità di rimuoverle.
Teradata
Le seguenti istruzioni sono 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 il sovraccarico di una funzione (ma non di una procedura). Nella dichiarazione CREATE FUNCTION oltre al nome della funzione, è necessario specificare un nome univoco della funzione mentre si sovraccaricano. Utilizzando un nome univoco, è possibile rimuovere una funzione con l’aiuto della seguente istruzione:
DROP SPECIFIC FUNCTION unique_function_name
Se una funzione non ha sovraccarichi, è possibile non specificare i tipi di argomento quando la si rimuove:
DROP FUNCTION function_name
Teradata supporta macro che in qualche modo sono come procedure. La seguente istruzione è 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.
La seguente istruzione è utilizzata per rimuovere procedure:
DROP PROCEDURE procedure_name(argument_types)
dove:
- argument_types – tipi di argomenti separati da una virgola.
Le procedure possono essere sovraccaricate. I tipi di argomento sono necessari anche se la procedura non ha sovraccarichi.
Vertica supporta molti tipi di funzioni:
- Funzioni aggregate (CREATE AGGREGATE)
- Funzioni analitiche (CREATE ANALYTIC FUNCTION)
- Funzioni di filtro di caricamento (CREATE FUNCTION)
- Funzioni di parser di caricamento (CREATE PARSER)
- Funzioni di sorgente di caricamento (CREATE SOURCE)
- Funzioni di trasformazione (CREATE TRANSFORM FUNCTION)
- Funzioni scalari (CREATE FUNCTION)
- SQL-functions (CREATE FUNCTION)
Ci sono istruzioni tra parentesi che aiutano a creare funzioni.
Tutte le funzioni tranne le SQL-functions hanno un’implementazione esterna, ossia, si riferiscono a una libreria dinamica esterna.
SQL-functions sono memorizzate in un database ma possono utilizzare solo query semplici.
C’è un’istruzione che rimuove funzioni per ogni 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 argomenti separati da una virgola.
Qualsiasi funzione può essere rimossa tramite un’istruzione DROP FUNCTION, tranne le funzioni aggregate e di trasformazione. Le funzioni possono essere sovraccaricate, quindi, per rimuoverle, è necessario specificare i tipi di argomento. Sono necessari anche se la funzione non ha sovraccarichi.
SAP HANA
Le seguenti istruzioni sono 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, viene specificato solo un nome quando le si rimuove.
Apache Impala
Impala permette la creazione di una funzione (scalare e aggregata) con un’implementazione esterna. Le funzioni scalari possono essere implementate in C++ e Java. Le funzioni aggregate solo in C++. La seguente istruzione è utilizzata per rimuovere 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 dal linguaggio di implementazione.
La seguente istruzione è utilizzata per rimuovere una funzione scalare in C++:
DROP FUNCTION scalar_function_name(argument_types)
La seguente istruzione è 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 durante la rimozione. Le funzioni Java sono sovraccaricate da Java stesso, per questo motivo, gli argomenti non devono essere specificati.
HPL/SQL offre maggiori opportunità per l’uso di procedure e funzioni.
Apache Hive
Hive permette 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 è utilizzata per rimuovere funzioni permanenti:
DROP FUNCTION function_name
La seguente istruzione è utilizzata per rimuovere funzioni temporanee:
DROP TEMPORARY FUNCTION function_name
Hive consente la creazione di macro temporanee che possono contenere semplici espressioni. La seguente istruzione è utilizzata per rimuovere macro:
DROP TEMPORARY MACRO macro_name
HPL/SQL offre maggiori opportunità per l’uso di procedure e funzioni.
Documentazioni diverse di DBMS: