Wie man ein Verfahren oder eine Funktion aus einer Datenbank entfernt
Bei der Entwicklung von Werkzeugen, die mit verschiedenen DBMS interagieren, müssen Sie viele Nuancen berücksichtigen, da dieselben Dinge auf verschiedene Weise implementiert werden können und ein SQL-Standard auf unterschiedliche Weise unterstützt werden kann.
Wenn man genug DBMS in Betracht zieht, stellt man fest, dass es keine universelle Methode gibt, eine Funktion oder ein Verfahren zu entfernen.
In dem Artikel werden nur relationale DBMS betrachtet.
PostgreSQL
In PostgreSQL können Sie 2 Arten von Funktionen erstellen: normale und aggregierende. Prozeduren können ab Version 11 erstellt werden, die Ende 2018 veröffentlicht wurde. Funktionen, einschließlich aggregierender Funktionen, sind in früheren Versionen verfügbar.
Mit einer DROP ROUTINE-Anweisung können Sie jede Funktion oder Prozedur entfernen. Die Syntax der Abfrage:
DROP ROUTINE funktion_oder_prozedur_name(argument_typen)
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Beispiel:
DROP ROUTINE meine_funktion(INTEGER, INTEGER)
Es kann Funktionen und Prozeduren mit demselben Namen, aber unterschiedlichen Argumenten geben. Das Erstellen einer Funktion mit demselben Namen wird als Überladen einer Funktion bezeichnet. Um Mehrdeutigkeiten beim Entfernen von Verfahren oder Funktionen zu beseitigen, müssen die Argumente angegeben werden. Wenn die Funktion oder Prozedur nicht überladen ist, ist es nicht erforderlich, die Argumenttypen anzugeben, während sie entfernt wird:
DROP ROUTINE funktion_oder_prozedur_name
Es gibt separate Anweisungen, um aggregierende Funktionen, normale Funktionen und Prozeduren jeweils zu entfernen:
- DROP AGGREGATE
- DROP FUNCTION
- DROP PROCEDURE
Die Syntax dieser Aussagen ist dieselbe wie die von DROP ROUTINE.
DROP ROUTINE und DROP PROCEDURE Aussagen und Verfahren kamen in der Version 11 auf. DROP AGGREGATE und DROP FUNCTION Aussagen werden verwendet, um Funktionen in früheren Versionen zu entfernen.
ORACLE
Die nächste Aussage wird verwendet, um Prozeduren in Oracle zu entfernen:
DROP PROCEDURE prozedur_name
Die Aussage ähnlich zu der vorherigen wird verwendet, um Funktionen zu entfernen:
DROP FUNCTION funktion_name
Beispiel:
DROP PROCEDURE meine_prozedur;
Funktionen und Prozeduren können eigenständig sein oder in einer Sammlung mit Hilfe eines Pakets erstellt werden. Das Entfernen von Funktionen und Prozeduren aus dem Paket ist nur durch Entfernen oder Neudefinieren des Pakets möglich.
Eigenständige Funktionen und Prozeduren können nicht überladen werden, daher ist es nicht erforderlich, Argumenttypen beim Entfernen anzugeben.
MySQL und MariaDB
Die nächste Aussage wird verwendet, um Prozeduren in MySQL und MariaDB zu entfernen:
DROP PROCEDURE prozedur_name
Die Aussage ähnlich zur vorherigen wird verwendet, um Funktionen zu entfernen:
DROP FUNCTION funktion_name
MySQL und MariaDB unterstützen kein Überladen von Prozeduren oder Funktionen, daher wird nur ein Name angegeben.
Seit der Version 10.3.3 (23. Dezember 2017) ist es möglich, in MariaDB aggregierende Funktionen zu erstellen. Aggregierende Funktionen werden wie normale Funktionen mit Hilfe der DROP FUNCTION Aussage entfernt.
SQLite
SQLite unterstützt das Erstellen von Prozeduren und Funktionen nicht, daher gibt es keine Aussage, um sie zu entfernen.
MS SQL Server
Die nächsten Aussagen werden verwendet, um Prozeduren, normale Funktionen und aggregative Funktionen in MS SQL zu entfernen:
DROP PROCEDURE prozedur_name
DROP FUNCTION normale_funktion_name
DROP AGGREGATE aggregatfunktion_name
MS SQL unterstützt kein Überladens von Prozeduren und Funktionen; daher wird nur der Name angegeben, wenn sie entfernt werden.
Im Gegensatz zu Prozeduren und normalen Funktionen beziehen sich aggregierende Funktionen in MS SQL nur auf eine externe Implementierung.
Netezza
Die nächsten Aussagen werden verwendet, um Verfahren, normale Funktionen und aggregate Funktionen in Netezza zu entfernen:
DROP PROCEDURE prozedur_name(argument_typen)
DROP FUNCTION normale_funktion_name(argument_typen)
DROP AGGREGATE aggregatfunktion_name(argument_typen)
wo:
- argument_typen – Argumente Typen, getrennt durch ein Komma.
Netezza unterstützt das Überladen von Funktionen und Verfahren; daher sind Argumenttypen notwendig. Im Gegensatz zu Verfahren beziehen sich Funktionen in Netezza nur auf eine externe Implementierung.
Informix
Die nächsten Aussagen werden verwendet, um Verfahren, normale Funktionen und aggregate Funktionen in Informix zu entfernen:
DROP PROCRDURE prozedur_name(argument_typen)
DROP FUNCTION normale_funktion_name(argument_typen)
DROP AGGREGATE aggregatfunktion_name
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Für das Entfernen von aggregativen Funktionen ist es nicht notwendig, Argumenttypen zu spezifizieren.
Es ist möglich, Verfahren zu überladen; daher können mehrere Verfahren den gleichen Namen haben. Um sie zu unterscheiden, ist es möglich, einem Verfahren beim Erstellen einen eindeutigen Namen zu geben. Das gilt auch für normale Funktionen. Ein eindeutiger Name kann zum Entfernen von Verfahren und normalen Funktionen in den folgenden Aussagen verwendet werden:
DROP SPECIFIC PROCEDURE eindeutiger_prozedurname
DROP SPECIFIC FUNCTION eindeutiger_normaler_funktionsname
Wenn ein Verfahren oder eine normale Funktion kein Überladen hat, dann ist es nicht notwendig, die Argumenttypen beim Entfernen anzugeben.
DROP PROCEDURE prozedurname
DROP FUNCTION normaler_funktionsname
Die nächste Aussage ermöglicht es, ein Verfahren oder eine normale Funktion zu entfernen:
DROP ROUTINE name(argument_typen)
oder im Fall, dass es keine Überladungen gibt:
DROP ROUTINE name
Diese Aussage ist nützlich, wenn man nicht weiß, was entfernt werden muss – ein Verfahren oder eine Funktion.
Außerdem kann ein eindeutiger Name zum Entfernen verwendet werden:
DROP SPECIFIC ROUTINE eindeutiger_name
IBM Db2
Die nächsten Aussagen werden verwendet, um Verfahren und Funktionen in IBM Db2 zu entfernen:
DROP PROCEDURE prozedur_name(argument_typen)
DROP PROCEDURES funktion_name(argument_typen)
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Verfahren können überladen werden; daher können mehrere Verfahren den gleichen Namen haben. Um sie zu definieren, ist es möglich, einen eindeutigen Wert beim Erstellen eines Verfahrens festzulegen. Das gilt auch für Funktionen. Ein eindeutiger Name kann zum Entfernen von Verfahren und Funktionen über die nächsten Aussagen verwendet werden:
DROP SPECIFIC PROCEDURE eindeutiger_prozedurname
DROP SPECIFIC FUNCTION eindeutige_funktionsname
Wenn ein Verfahren oder eine Funktion kein Überladen hat, dann ist es nicht notwendig, Argumenttypen beim Entfernen anzugeben:
DROP PROCEDURE prozedurname
DROP FUNCTION funktionsname
AWS Athena
Athena unterstützt kein Erstellen von Verfahren und Funktionen; daher besteht keine Möglichkeit, diese zu entfernen.
Teradata
Die nächsten Aussagen werden verwendet, um Verfahren und Funktionen in Teradata zu entfernen:
DROP PROCEDURE prozedurname
DROP FUNCTION funktionsname(argument_typen)
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Teradata ermöglicht es, eine Funktion (aber kein Verfahren) zu überladen. In einer CREATE FUNCTION-Aussage ist es neben einem Funktionsnamen notwendig, einen eindeutigen Funktionsnamen beim Überladen anzugeben. Mit einem eindeutigen Namen ist es möglich, eine Funktion mit Hilfe der nächsten Aussage zu entfernen:
DROP SPECIFIC FUNCTION eindeutiger_funktionsname
Wenn eine Funktion kein Überladen hat, ist es möglich, die Argumenttypen beim Entfernen nicht anzugeben:
DROP FUNCTION funktionsname
Teradata unterstützt Makros, die etwas wie Verfahren sind. Die nächste Aussage wird verwendet, um Makros zu entfernen:
DROP MACRO macro_name
Vertica
Vertica ermöglicht das Erstellen neuer Verfahren (CREATE PROCEDURE-Anweisung), die auf eine externe ausführbare Datei verweisen. Gespeicherte Verfahren werden nicht unterstützt.
Die nächste Aussage wird verwendet, um Verfahren zu entfernen:
DROP PROCEDURE prozedurname(argument_typen)
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Verfahren können überladen werden. Argumenttypen sind notwendig, sogar wenn das Verfahren kein Überladen hat.
Vertica unterstützt viele Funktionstypen:
- Aggregative Funktionen (CREATE AGGREGATE)
- Analitische Funktionen (CREATE ANALITIC FUNCTION)
- Load Filter-Funktionen (CREATE FUNCTION)
- Load Parser-Funktionen (CREATE PARSER)
- Load Source-Funktionen (CREATE SOURCE)
- Transformationsfunktionen (CREATE TRANSFORM FUNCTION)
- Skalarfunktionen (CREATE FUNCTION)
- SQL-Funktionen (CREATE FUNCTION)
In Klammern befinden sich Anweisungen, die zur Erstellung von Funktionen beitragen.
Alle Funktionen mit Ausnahme von SQL-Funktionen haben eine externe Implementierung, das heißt, sie beziehen sich auf eine externe dynamische Bibliothek.
SQL-Funktionen sind in einer Datenbank gespeichert, können aber nur einfache Abfragen verwenden.
Es gibt eine Aussage zur Entfernung von Funktionen für jeden Funktionstyp, mit Ausnahme von analytischen Funktionen.
DROP AGGREGATE FUNCTION name(argument_typen)
DROP FILTER name()
DROP SOURCE name()
DROP PARSER name()
DROP TRANSFORM FUNCTION name(argument_typen)
DROP FUNCTION name(argument_typen)
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Jede Funktion kann durch eine DROP FUNCTION-Anweisung entfernt werden, außer aggregativen und Transformationsfunktionen. Funktionen können überladen werden, daher ist es notwendig, die Argumenttypen zum Entfernen anzugeben. Sie sind notwendig, selbst wenn die Funktion kein Überladen hat.
SAP HANA
Die nächsten Aussagen werden verwendet, um Verfahren und Funktionen in SAP HANA zu entfernen:
DROP PROCEDURE prozedurname
DROP FUNCTION funktionsname
Das Überladen von Funktionen und Verfahren wird nicht unterstützt; daher wird beim Entfernen nur ein Name angegeben.
Apache Impala
Impala ermöglicht das Erstellen von Funktionen (skalar und aggregiert) mit einer externen Implementierung. Skalare Funktionen können in C++ und Java implementiert werden. Aggregate nur in C++. Die nächste Aussage wird verwendet, um aggregative Funktionen zu entfernen:
DROP AGGREGATE FUNCTION funktionsname(argument_typen)
wo:
- argument_typen – Argumenttypen, getrennt durch ein Komma.
Die Aussage zum Entfernen einer Skalarfunktion hängt von der Sprachimplementierung ab.
Die nächste Aussage wird verwendet, um eine Skalarfunktion in C++ zu entfernen:
DROP FUNCTION skalare_funktion_name(arguments_typen)
Die nächste Aussage wird verwendet, um eine Skalarfunktion in Java zu entfernen:
DROP FUNCTION skalare_funktion_name
Impala ermöglicht das Überladen von Funktionen; daher ist es notwendig, die Argumenttypen beim Entfernen anzugeben. Java-Funktionen werden von Java selbst überladen, aus diesem Grund müssen Argumente nicht angegeben werden.
HPL/SQL bietet größere Möglichkeiten für die Verwendung von Verfahren und Funktionen.
Apache Hive
Hive ermöglicht die Erstellung von Funktionen mit einer externen Implementierung in Java. Funktionen können temporär oder dauerhaft sein. Temporäre Funktionen existieren nur in der aktuellen Sitzung.
Die nächste Aussage wird verwendet, um dauerhafte Funktionen zu entfernen:
DROP FUNCTION funktionsname
Die nächste Aussage wird verwendet, um temporäre Funktionen zu entfernen:
DROP TEMPORARY FUNCTION funktionsname
Hive ermöglicht es, temporäre Makros zu erstellen, die einfache Ausdrücke enthalten können. Die nächste Aussage wird verwendet, um Makros zu entfernen:
DROP TEMPORARY MACRO makro_name
HPL/SQL bietet größere Möglichkeiten für die Verwendung von Verfahren und Funktionen.
Unterschiedliche DBMS-Dokumentation: