Entfernen einer Prozedur oder Funktion aus einer Datenbank
Beim Entwickeln von Tools, die mit verschiedenen DBMS interagieren, müssen Sie viele Nuancen berücksichtigen, da dieselben Dinge auf unterschiedliche Weisen implementiert werden können und ein SQL-Standard ebenfalls unterschiedlich unterstützt werden kann.
Wenn man eine ausreichende Anzahl von DBMS in Betracht zieht, stellt sich heraus, dass es keine universelle Methode zum Entfernen einer Funktion oder Prozedur gibt.
Nur relationale DBMS werden im Artikel behandelt.
PostgreSQL
In PostgreSQL können zwei Arten von Funktionen erstellt werden: normale und Aggregatfunktionen. Prozeduren können seit der Version 11 erstellt werden, die Ende 2018 veröffentlicht wurde. Funktionen, einschließlich Aggregatfunktionen, sind in früheren Versionen verfügbar.
Mit einer DROP ROUTINE-Anweisung ist es möglich, jede Funktion oder Prozedur zu entfernen. Die Syntax der Abfrage:
DROP ROUTINE function_or_procedure_name(argument_types)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Zum Beispiel:
DROP ROUTINE my_function(INTEGER, INTEGER)
Es könnte Funktionen und Prozeduren mit demselben Namen, aber unterschiedlichen Argumenten geben. Eine Funktion mit demselben Namen zu erstellen, wird als Überladung bezeichnet. Um Mehrdeutigkeiten beim Entfernen von Prozeduren oder Funktionen zu vermeiden, müssen die Argumente angegeben werden. Wenn die Funktion oder Prozedur nicht überladen ist, ist es nicht notwendig, die Argumenttypen beim Entfernen anzugeben:
DROP ROUTINE function_or_procedure_name
Es gibt separate Anweisungen zum Entfernen von Aggregatfunktionen, normalen Funktionen und Prozeduren:
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
Die Syntax dieser Anweisungen ist identisch mit der von DROP ROUTINE.
DROP ROUTINE und DROP PROCEDURE Anweisungen und Prozeduren wurden in Version 11 eingeführt. DROP AGGREGATE und DROP FUNCTION Anweisungen werden verwendet, um Funktionen in früheren Versionen zu entfernen.
ORACLE
Die folgende Anweisung wird verwendet, um Prozeduren in Oracle zu entfernen:
DROP PROCEDURE procedure_name
Die zur vorherigen ähnliche Anweisung wird verwendet, um Funktionen zu entfernen:
DROP FUNCTION function_name
Zum Beispiel:
DROP PROCEDURE my_procedure;
Funktionen und Prozeduren können eigenständig sein oder in einem Paket erstellt werden. Funktionen und Prozeduren aus dem Paket zu entfernen, ist nur durch Entfernen oder Neudefinieren des Pakets möglich.
Eigenständige Funktionen und Prozeduren können nicht überladen werden, daher ist es nicht notwendig, Argumenttypen beim Entfernen anzugeben.
MySQL und MariaDB
Die folgende Anweisung wird verwendet, um Prozeduren in MySQL und MariaDB zu entfernen:
DROP PROCEDURE procedure_name
Die zur vorherigen ähnliche Anweisung wird verwendet, um Funktionen zu entfernen:
DROP FUNCTION function_name
MySQL und MariaDB unterstützen keine Überladung von Prozeduren oder Funktionen; daher wird nur ein Name angegeben.
Seit Version 10.3.3 (23. Dezember 2017) ist es möglich, Aggregatfunktionen in MariaDB zu erstellen. Aggregatfunktionen werden wie normale mit der DROP FUNCTION Anweisung entfernt.
SQLite
SQLite unterstützt das Erstellen von Prozeduren und Funktionen nicht, daher gibt es keine Anweisung, um sie zu entfernen.
MS SQL Server
Die folgenden Anweisungen werden verwendet, um Prozeduren, normale Funktionen und Aggregatfunktionen in MS SQL zu entfernen:
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
DROP AGGREGATE aggregate_function_name
MS SQL unterstützt keine Überladung von Prozeduren und Funktionen; daher wird beim Entfernen nur der Name angegeben.
Im Gegensatz zu Prozeduren und normalen Funktionen beziehen sich Aggregatfunktionen in MS SQL nur auf eine externe Implementierung.
Netezza
Die folgenden Anweisungen werden verwendet, um Prozeduren, normale Funktionen und Aggregatfunktionen in Netezza zu entfernen:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name(argument_types)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Netezza unterstützt die Überladung von Funktionen und Prozeduren; daher sind Argumenttypen notwendig. Im Gegensatz zu Prozeduren beziehen sich Funktionen in Netezza nur auf eine externe Implementierung.
Informix
Die folgenden Anweisungen werden verwendet, um Prozeduren, normale Funktionen und Aggregatfunktionen in Informix zu entfernen:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION normal_function_name(argument_types)
DROP AGGREGATE aggregate_function_name
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Es ist nicht notwendig, Argumenttypen für Aggregatfunktionen anzugeben.
Es besteht die Möglichkeit, Prozeduren zu überladen; daher können mehrere Prozeduren denselben Namen haben. Um sie zu unterscheiden, kann einer Prozedur bei ihrer Erstellung ein eindeutiger Name gegeben werden. Das gilt auch für normale Funktionen. Ein eindeutiger Name kann verwendet werden, um Prozeduren und normale Funktionen in den folgenden Anweisungen zu entfernen:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_normal_function_name
Wenn eine Prozedur oder eine normale Funktion nicht überladen ist, ist es nicht erforderlich, Argumenttypen beim Entfernen anzugeben.
DROP PROCEDURE procedure_name
DROP FUNCTION normal_function_name
Die folgende Anweisung bietet das Entfernen einer Prozedur oder einer normalen Funktion:
DROP ROUTINE name(argument_types)
oder im Falle, dass keine Überladungen vorliegen:
DROP ROUTINE name
Diese Anweisung ist nützlich, wenn unbekannt ist, was entfernt werden muss – eine Prozedur oder eine Funktion.
Außerdem kann ein eindeutiger Name zum Entfernen verwendet werden:
DROP SPECIFIC ROUTINE unique_name
IBM Db2
Die folgenden Anweisungen werden verwendet, um Prozeduren und Funktionen in IBM Db2 zu entfernen:
DROP PROCEDURE procedure_name(argument_types)
DROP FUNCTION function_name(argument_types)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Prozeduren können überladen werden; daher können mehrere Prozeduren denselben Namen haben. Um sie zu definieren, ist es möglich, beim Erstellen einer Prozedur einen eindeutigen Wert anzugeben. Das gilt auch für Funktionen. Ein eindeutiger Name kann verwendet werden, um Prozeduren und Funktionen durch die folgenden Anweisungen zu entfernen:
DROP SPECIFIC PROCEDURE unique_procedure_name
DROP SPECIFIC FUNCTION unique_function_name
Wenn eine Prozedur oder eine Funktion keine Überladungen hat, ist es nicht notwendig, Argumenttypen beim Entfernen anzugeben:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
AWS Athena
Athena unterstützt das Erstellen von Prozeduren und Funktionen nicht; daher gibt es keine Möglichkeit, sie zu entfernen.
Teradata
Die folgenden Anweisungen werden verwendet, um Prozeduren und Funktionen in Teradata zu entfernen:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name(argument_types)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Teradata erlaubt die Überladung einer Funktion (aber nicht einer Prozedur). In einer CREATE FUNCTION Anweisung ist es zusätzlich zu einem Funktionsnamen notwendig, einen eindeutigen Namen der Funktion bei der Überladung anzugeben. Unter Verwendung eines eindeutigen Namens kann eine Funktion mit der Hilfe der folgenden Anweisung entfernt werden:
DROP SPECIFIC FUNCTION unique_function_name
Wenn eine Funktion keine Überladungen hat, ist es möglich, die Argumenttypen beim Entfernen nicht anzugeben:
DROP FUNCTION function_name
Teradata unterstützt Makros, die in gewisser Weise wie Prozeduren sind. Die folgende Anweisung wird verwendet, um Makros zu entfernen:
DROP MACRO macro_name
Vertica
Vertica ermöglicht das Erstellen neuer Prozeduren (CREATE PROCEDURE Anweisung), die sich auf eine externe ausführbare Datei beziehen. Gespeicherte Prozeduren werden nicht unterstützt.
Die folgende Anweisung wird zum Entfernen von Prozeduren verwendet:
DROP PROCEDURE procedure_name(argument_types)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Prozeduren können überladen werden. Argumenttypen sind erforderlich, selbst wenn die Prozedur keine Überladungen hat.
Vertica unterstützt viele Funktionstypen:
- Aggregatfunktionen (CREATE AGGREGATE)
- Analytische Funktionen (CREATE ANALYTIC FUNCTION)
- Ladefilterfunktionen (CREATE FUNCTION)
- The parser-Funktionen (CREATE PARSER)
- Ladequellenfunktionen (CREATE SOURCE)
- Transformationsfunktionen (CREATE TRANSFORM FUNCTION)
- Skalarfunktionen (CREATE FUNCTION)
- SQL-Funktionen (CREATE FUNCTION)
Es gibt Anweisungen in Klammern, die bei der Erstellung von Funktionen helfen.
Alle Funktionen außer SQL-Funktionen haben eine externe Implementierung, das heißt, sie beziehen sich auf eine externe dynamische Bibliothek.
SQL-Funktionen werden in einer Datenbank gespeichert, können jedoch nur einfache Abfragen verwenden.
Es gibt eine Anweisung zum Entfernen von Funktionen für jeden Funktionstyp, außer analytischen Funktionen.
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)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Jede Funktion kann mit einer DROP FUNCTION-Anweisung entfernt werden, mit Ausnahme von Aggregat- und Transformationsfunktionen. Funktionen können überladen werden, daher ist es notwendig, Argumenttypen anzugeben, um sie zu entfernen. Sie sind sogar dann erforderlich, wenn die Funktion keine Überladungen hat.
SAP HANA
Die folgenden Anweisungen werden verwendet, um Prozeduren und Funktionen in SAP HANA zu entfernen:
DROP PROCEDURE procedure_name
DROP FUNCTION function_name
Eine Überladung von Funktionen und Prozeduren wird nicht unterstützt; daher wird beim Entfernen nur ein Name angegeben.
Apache Impala
Impala ermöglicht das Erstellen einer Funktion (skalar und Aggregat) mit einer externen Implementierung. Skalarfunktionen können in C++ und Java implementiert werden. Aggregatfunktionen nur in C++. Die folgende Anweisung wird verwendet, um Aggregatfunktionen zu entfernen:
DROP AGGREGATE FUNCTION function_name(argument_types)
wo:
- argument_types – Argumenttypen, getrennt durch ein Komma.
Die Anweisung, um eine skalare Funktion zu entfernen, hängt von der Sprache der Implementierung ab.
Die folgende Anweisung wird verwendet, um eine skalare Funktion in C++ zu entfernen:
DROP FUNCTION scalar_function_name(argument_types)
Die folgende Anweisung wird verwendet, um eine skalare Funktion in Java zu entfernen:
DROP FUNCTION scalar_function_name
Impala erlaubt die Überladung von Funktionen; daher ist es notwendig, Argumenttypen beim Entfernen anzugeben. Java-Funktionen werden von Java selbst überladen, daher müssen keine Argumente angegeben werden.
HPL/SQL bietet größere Möglichkeiten zur Nutzung von Prozeduren und Funktionen.
Apache Hive
Hive ermöglicht das Erstellen von Funktionen mit einer externen Implementierung in Java. Funktionen können temporär oder permanent sein. Temporäre Funktionen existieren nur in der aktuellen Sitzung.
Die folgende Anweisung wird verwendet, um permanente Funktionen zu entfernen:
DROP FUNCTION function_name
Die folgende Anweisung wird verwendet, um temporäre Funktionen zu entfernen:
DROP TEMPORARY FUNCTION function_name
Hive erlaubt das Erstellen temporärer Makros, die einfache Ausdrücke enthalten können. Die folgende Anweisung wird verwendet, um Makros zu entfernen:
DROP TEMPORARY MACRO macro_name
HPL/SQL bietet größere Möglichkeiten zur Nutzung von Prozeduren und Funktionen.
Verschiedene DBMS-Dokumentationen: