In diesem Artikel erfahren Sie, wie Sie eine benutzerdefinierte Funktion erstellen. Es wird auch als gespeicherte Funktion oder Benutzerfunktion bezeichnet.
-
Benutzerdefinierte Funktionen ähneln Prozeduren. Der einzige Unterschied
ist, dass die Funktion immer einen Wert zurückgibt.
-
Benutzerdefinierte Funktionen können als Teil eines SQL-Ausdrucks verwendet werden.
1. Funktion - Abrufen einer formatierten Adresse
In diesem Beispiel erstellen wir eine Funktion, um eine formatierte Adresse durch Angabe des Namens der Person zu erhalten.
1.1 Tabellen und Funktion erstellen.
-- creating table person__info CREATE TABLE person__info ( PERSON__ID Nummer (5) Primärschlüssel, FIRST__NAME varchar2 (20), LAST__NAME varchar2 (20) );
--creating table person__address__details CREATE TABLE person__address__details ( PERSON__ADDRESS__ID number(5) primary key, PERSON__ID number(5) references person__info(person__id), CITY varchar2(15), STATE varchar2(15), COUNTRY varchar2(20), ZIP__CODE varchar2(10) );
--creating function get__complete__address Erstellen oder Ersetzen von FUNCTION get__complete__address (in__person__id IN NUMBER) RETURN VARCHAR2 IS Person__details VARCHAR2 (130); START SELECT 'Name-' || Person.Erster__Name || ' '|| person.last__name || ', Stadt-' || address.city || ', State-' || address.state || ', Country-' || address.country || ', Postleitzahl-' || address.zip__code INTO Personendetails FROM person__info person, person__addressedetails WHERE person .person__id = in__person__id UND address.person__id = person.person__id; RETURN (Personendetails); END get__complete__address;
1.2 Daten zum Testen einfügen.
INSERT in person__info WERTE (10, 'Luis', 'Thomas'); INSERT in person__info WERTE (20, 'Wang', 'Moris'); INSERT in person__address__details VALUES (101,10, 'Vegas', 'Nevada', 'US', '88901'); INSERT in person__address__details VALUES (102,20, 'Carson', 'Nevada', 'US', '90220');
1.3 Zeigen Sie die Daten an.
select ** from PERSON__INFO;
[cols = ",,", options = "header",]| ================================== | PERSON ID | FIRST NAME | LAST__NAME | 10 | Luis | Thomas | 20 | Wang | Moris | ==================================
select ** from PERSON__ADDRESS__DETAILS;
[cols = ",,,,,", options = "header",]| ================================================== =========== | PERSON ADDRESS ID | PERSON ID | CITY | STATE | LAND | ZIP CODE | 101 | 10 | Vegas | Nevada | US | 88901 | 102 | 20 | Carson | Nevada | US | 90220 | ===========
1.4 Funktion aufrufen. Funktion kann auf viele Arten aufgerufen werden. Hier zuerst wir
ruft es in SELECT-Anweisung auf. Und dann rufen wir es an
dbms
output.put
line
SELECT get__complete__address (10) AS "Personenadresse" FROM DUAL; -- output -- Name-Luis Thomas, City-Vegas, State-Nevada, Country-US, ZIP Code-88901
SET SERVEROUTPUT ON; EXECUTE dbms__output.put__line (get__complete__address (20)); -- output -- Name-Wang Moris, City-Carson, State-Nevada, Country-US, ZIP Code-90220
2. Function – Check Palindrome String
In this example, we will create a function to check whether a given string is palindrome or not.
Ein Palindrom ist ein Wort, ein Satz, eine Zahl oder eine andere Zeichenfolge das liest das gleiche rückwärts als vorwärts, wie Frau oder Rennwagen. https://en.wikipedia.org/wiki/Palindrome
2.1 Funktion erstellen.
FUNKTION ERSTELLEN ODER ERSETZEN checkForPalindrome (inputString VARCHAR2) RETURN VARCHAR2 IS Ergebnis VARCHAR2 (75); reversedString VARCHAR2 (50); BEGIN SELECT REVERSE (inputString) INTO reversedString FROM DUAL; - Verwenden Sie UPPER, um die Groß-/Kleinschreibung zu ignorieren. IF UPPER (inputString) = UPPER (reversedString) DANN RETURN (inputString || 'IST ein Palindrom.'); ENDE WENN; RETURN (inputString || 'IST KEIN Palindrom.'); ENDE checkForPalindrome;/.... 2.2 Funktion aufrufen.SELECT checkForPalindrome ('COMPUTER') FROM DUAL; — Ausgabe - COMPUTER IST KEIN Palindrom.
SELECT checkForPalindrome ('MAdam') FROM DUAL; — Ausgabe - MAdam ist ein Palindrom.
SELECT checkForPalindrome ('KANAK') FROM DUAL;
— Output — KANAK IS a palindrome.
=== 3. Function – Calculate income tax In this example, we will create a function to calculate income tax, assumed tax rate is 30% of all annual income from salary. 3.1 Create tables and function.--creating table person
CREATE TABLE person ( PERSON__ID number(5) primary key, FULLNAME varchar2(20) );
--creating table person salary details
CREATE TABLE person salary details ( SALARY ID Nummer (5) Primärschlüssel, PERSON ID Nummer (5) verweist auf person (person__id), GEHALT-Nummer (8), MONAT varchar2 (9), JAHR Nummer (4) );
--creating function
CREATE OR REPLACE FUNCTION calculate__tax(personId NUMBER) RETURN NUMBER IS tax NUMBER(10,2);
BEGIN tax := 0;
SELECT (sum(salary)** 30)/100 INTO tax FROM person__salary__details WHERE person__id = personId;RETURN tax;END calculate__tax;
3.2 Daten zum Testen einfügen.INSERT INTO person VALUES (101,'Mark Phile');
INSERT INTO person salary details VALUES (1,101,15000,'JANUARY',2016); INSERT INTO person salary details VALUES (2,101,15000,'FEBRUARY',2016); INSERT INTO person salary details VALUES (3,101,15000,'MARCH',2016); INSERT INTO person salary details VALUES (4,101,18000,'APRIL',2016); INSERT INTO person salary details VALUES (5,101,18000,'MAY',2016); INSERT INTO person salary details VALUES (6,101,18000,'JUNE',2016); INSERT INTO person salary details VALUES (7,101,18000,'JULY',2016); INSERT INTO person salary details VALUES (8,101,18000,'AUGUST',2016); INSERT INTO person salary details VALUES (9,101,18000,'SEPTEMBER',2016); INSERT INTO person salary details VALUES (10,101,18000,'OCTOBER',2016); INSERT INTO person salary details VALUES (11,101,18000,'NOVEMBER',2016); INSERT INTO person salary details VALUES (12,101,18000,'DECEMBER',2016);
3.3 Zeigen Sie die Daten an.select ** from PERSON;
[cols=",",options="header",] | =================== | PERSON__ID | FULLNAME | 101 | Mark Phile | =====================select ** from PERSON SALARY DETAILS;
[cols=",,,,",options="header",] | ========================================= | SALARY__ID | PERSON__ID | SALARY | MONTH | JAHR | 1 | 101 | 15000 | JANUAR | 2016 | 2 | 101 | 15000 | FEBRUAR | 2016 | 3 | 101 | 15000 | MÄRZ | 2016 | 4 | 101 | 18000 | APRIL | 2016 | 5 | 101 | 18000 | MAI | 2016 | 6 | 101 | 18000 | JUNI | 2016 | 7 | 101 | 18000 | JULI | 2016 | 8 | 101 | 18000 | AUGUST | 2016 | 9 | 101 | 18000 | SEPTEMBER | 2016 | 10 | 101 | 18000 | OKTOBER | 2016 | 11 | 101 | 18000 | NOVEMBER | 2016 | 12 | 101 | 18000 | DEZEMBER | 2016 | =========================== =============== 3.4 Funktion aufrufen.SELECT person.fullname, sum(sal.salary) AS AnnualSalary, sal.year,calculate tax(101) AS tax FROM person,person salary details sal WHERE person.person id = 101 and sal.year = 2016 GROUP BY person.fullname, sal.year;
Ausgabe [cols=",,,",options="header",] | ================================ | FULLNAME | JÄHRLICH | JAHR | STEUER | Mark Phile | 207000 | 2016 | 62100 | =================================== === Referenzen . https://docs.oracle.com/cd/B19306__01/server.102/b14200/functions231.htm[User Definierte Funktionen: - Offizielle Oracle-Dokumente]. https://docs.oracle.com/cd/B19306__01/server.102/b14200/statements__5009.htm#i2153260 Funktion: - Offizielle Oracle-Dokumente] link://tag/function/[funktion]link://tag/oracle/[oracle]link://tag/palindrome/[palindrome]link://tag/plsql/[plsql]