Beispiele zur Erläuterung der Definition datenbanküberladener Funktionen

Dieser Artikel wurde von der Huawei Cloud Community „ GaussDB Database SQL Series – Defining Overloaded Functions “ von Gauss Squirrel Club Assistant 2 geteilt.

I. Einleitung

In diesem Artikel stellen wir das Konzept, die Verwendung und Beispiele der Überladung benutzerdefinierter Funktionen in der GaussDB-Datenbank vor. Benutzerdefinierte Funktionen sind häufig verwendete „Programmierwerkzeuge“ in SQL, mit denen wir Funktionen anpassen können, um Daten zu verarbeiten und zu manipulieren. Unter Funktionsüberladung versteht man die Definition mehrerer Funktionen mit demselben Namen, aber unterschiedlichen Parametern in einer Datenbank, um unterschiedliche Funktionen zu erreichen.

2. Definition der Funktionsüberladung

Funktionsüberladung ist eine Funktion, die es ermöglicht, mehrere Funktionen mit demselben Namen in derselben Datenbank zu definieren. Diese Funktionen mit demselben Namen unterscheiden sich in Parametertyp, Anzahl oder Reihenfolge, sodass je nach den übergebenen Parametern unterschiedliche Funktionen aufgerufen werden können. Durch Funktionsüberladung können wir denselben Funktionsnamen verwenden, um mehrere Funktionen zu implementieren, wodurch die Lesbarkeit und Wiederverwendbarkeit des Codes verbessert wird.

3. Anweisungen zum Erstellen benutzerdefinierter überladener Funktionen in GaussDB

• PostgreSQL-kompatible Funktionen oder Funktionen mit dem PACKAGE-Attribut unterstützen Überladung. Wenn sich bei der Angabe von REPLACE die Anzahl der Parameter, der Typ und der Rückgabewert ändern, wird die ursprüngliche Funktion nicht ersetzt, sondern eine neue Funktion erstellt.

• Sie können keine überladenen Funktionen erstellen, die sich nur in den formalen Parameternamen unterscheiden (Funktionsname und Parameterlistentyp sind gleich).

• Formale Parameter werden nicht nur in Überladungen unterstützt, bei denen sich der Typ des benutzerdefinierten Ref-Cursors vom Typ sys_refcursor unterscheidet.

• Funktionsüberladungen, die sich nur im zurückgegebenen Datentyp unterscheiden, werden nicht unterstützt.

• Funktionsüberladungen, die sich nur in den Standardwerten unterscheiden, werden nicht unterstützt.

• Beim Aufruf einer überladenen Funktion muss die Variable einen eindeutigen spezifischen Typ haben.

• PACKAGE gibt an, ob die Funktion Überladung unterstützt.

• Das Überladen oder Ersetzen von Paketfunktionen und Nicht-Paketfunktionen ist nicht zulässig.

• Die Paketfunktion unterstützt keine Parameter vom Typ VARIADIC.

• Eine Änderung des Paketattributs der Funktion ist nicht zulässig.

4. Beispiel einer benutzerdefinierten überladenen Funktion in der GaussDB-Datenbank

Mithilfe der Funktionsüberladung können wir je nach Situation unterschiedliche Funktionen auswählen, um unterschiedliche Funktionen zu implementieren, wodurch der Code prägnanter und lesbarer wird.

Beispiel 1: Erstellen Sie eine Paketattribut-Überladungsfunktion, um generierte Ansichten basierend auf verschiedenen SQL-Bedingungen zu erhalten

1. Erhalten Sie Mitarbeiterinformationen basierend auf dem Mitarbeiternamen (Parameter).

--根据员工姓名(参数)获取员工信息

CREATE OR REPLACE FUNCTION f_test1_overload(c_name VARCHAR)

RETURNS VOID PACKAGE

LANGUAGE plpgsql

AS $$

DECLARE

s_sql TEXT;

BEGIN

s_sql := 'CREATE OR REPLACE VIEW v_company1 AS SELECT * FROM company1 where name=''' || c_name || '''' ;

EXECUTE s_sql;

END $$;

--调用

select f_test1_overload('Allen');

--查看执行结果

select * from v_company1;

Anrufergebnis:

cke_131.png

2. Erhalten Sie Mitarbeiterinformationen anhand des Mitarbeiternamens oder des Mitarbeiteralters

--根据员工姓名或员工年龄获取员工信息

CREATE OR REPLACE FUNCTION f_test1_overload(c_name VARCHAR,c_age INT)

RETURNS VOID PACKAGE

LANGUAGE plpgsql

AS $$

DECLARE

s_sql TEXT;

BEGIN

s_sql := 'CREATE OR REPLACE VIEW v_company2 AS SELECT * FROM company1 where name=''' || c_name || ''' OR age >= ''' || c_age || '''' ;

EXECUTE s_sql;

END $$;

--调用

select f_test1_overload('Allen',25);

--查看执行结果

select * from v_company2;

Anrufergebnis:

cke_132.png

Beispiel 2: Erstellen Sie eine Paketattribut-Überladungsfunktion, um den Grafikbereich basierend auf verschiedenen Parametern zu berechnen.

1. Finden Sie die Fläche anhand von Länge und Breite

- Finden Sie die Fläche anhand von Länge und Breite

CREATE OR REPLACE FUNCTION f_test2_overload(length INT, width INT)

RETURNS INT PACKAGE

LANGUAGE plpgsql

AS $$

BEGIN

RETURN length * width;

END $$;

--调用

SELECT f_test2_overload(5,10)

Anrufergebnis:

cke_133.png

2. Ermitteln Sie die Fläche S=πr im Quadrat basierend auf dem Radius.

--根据半径求面积S=πr平方

CREATE OR REPLACE FUNCTION f_test2_overload(radius INT)

RETURNS FLOAT PACKAGE

LANGUAGE plpgsql

AS $$

BEGIN

RETURN 3.14 * radius * radius;

END $$;

--调用

SELECT f_test2_overload(10)

Anrufergebnis:

cke_134.png

Spezielle Notiz:

Es ist zu beachten, dass es nicht erforderlich ist, benutzerdefinierte überladene Funktionen in der Datenbank zu implementieren, da das Datenbanksystem normalerweise bereits über einen umfangreichen Satz integrierter Funktionen und Operatoren verfügt, die die meisten Datenverarbeitungsanforderungen erfüllen können. Wenn Sie eine spezielle Datenverarbeitungslogik implementieren müssen, können Sie zunächst die Verwendung integrierter Funktionen und Operatoren in Betracht ziehen. Wenn die Anforderungen nicht erfüllt werden können, ziehen Sie benutzerdefinierte überladene Funktionen in Betracht.

5. Zusammenfassung

In der GaussDB-Datenbank ist die Funktionsüberladung eine wichtige Funktion, die es uns ermöglicht, mehrere Funktionen mit demselben Namen in derselben Datenbank zu definieren und unterschiedliche Funktionen basierend auf unterschiedlichen Parametern aufzurufen. Durch Funktionsüberladung können wir die Lesbarkeit und Wiederverwendbarkeit des Codes verbessern und eine einheitliche Verwaltung mehrerer Funktionen unter einem Funktionsnamen erreichen. Unabhängig davon, ob es auf Unterschieden im Parametertyp, in der Anzahl oder in der Reihenfolge basiert, bietet uns die Funktionsüberladung mehr Flexibilität und Selektivität.

Bei der Anwendung der Funktionsüberladung sollten wir darauf achten, nicht zu viele überladene Funktionen zu definieren, die zu Verwirrung und Redundanz führen können. Der sinnvolle Einsatz von Funktionsüberladung kann die Wartbarkeit und Skalierbarkeit des Codes verbessern und Datenbankanwendungen effizienter und zuverlässiger machen.

Klicken Sie hier, um zu folgen und so schnell wie möglich mehr über die neuen Technologien von Huawei Cloud zu erfahren~

Alibaba Cloud erlitt einen schwerwiegenden Ausfall und alle Produkte waren betroffen (wiederhergestellt). Tumblr hat das russische Betriebssystem Aurora OS 5.0 abgekühlt . Neue Benutzeroberfläche vorgestellt : Delphi 12 & C++ Builder 12, RAD Studio 12. Viele Internetunternehmen stellen dringend Hongmeng-Programmierer ein. UNIX-Zeit steht kurz vor dem Eintritt in die 1,7-Milliarden-Ära (bereits eingetreten). Meituan rekrutiert Truppen und plant die Entwicklung der Hongmeng-System-App. Amazon entwickelt ein Linux-basiertes Betriebssystem, um die Abhängigkeit von Android von .NET 8 unter Linux zu beseitigen. Die unabhängige Größe ist um 50 % reduziert. FFmpeg 6.1 „Heaviside“ ist erschienen
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10143249
Recomendado
Clasificación