この記事では、ユーザー定義関数を作成する方法を理解するのに役立ちます。ストアドファンクションまたはユーザーファンクションとも呼ばれます。

  1. ユーザー定義関数はプロシージャーに似ています. 唯一の違い

その関数が常に値を返すかどうかです。

  1. ユーザー定義関数は、SQL式の一部として使用できます.

1.機能 – フォーマットされたアドレスを取得する

この例では、人の名前を指定して書式付きアドレスを取得する関数を作成します。

1.1テーブルと関数を作成します。

-- creating table person__info

CREATE TABLE person__info
(
  PERSON__ID番号(5)主キー、
  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

ファンクションの作成または置換get__complete__address(in__person__id IN NUMBER)RETURN VARCHAR2 IS person__details VARCHAR2(130);

ベギン

SELECT 'Name-' || person.first__name || ' '|| person.last__name || '、City-' ||アドレス帳|| '、国家' ||アドレス帳|| '、国 - ' ||住所郡|| '、郵便番号 - ' ||住所.zip__code INTO person__details FROM person__info person、person__address__details住所WHERE人.person__id = in__person__id AND address.person__id = person.person__id;

RETURN(person__details);

END get__complete__address;

1.2テストのためにデータを挿入する。

INSERT INTO person__info VALUES(10、 'Luis'、 'Thomas'); INSERT INTO person__info VALUES(20、 'Wang'、 'Moris');

INSERT INTO person__address__details VALUES(101,10、 'Vegas'、 'Nevada'、 'US'、 '88901');
INSERT INTO person__address__details VALUES(102,20、 'Carson'、 'Nevada'、 'US'、 '90220');

1.3データを表示します。

PERSON__INFOから** を選択します。

[cols = “,,”、options = “header”、]| ==========================
| PERSON

ID | FIRST

NAME | LAST__NAME
| 10 |ルイス|トーマス
| 20 |王|モリス
| ==========================

PERSON__ADDRESS__DETAILSから** を選択してください。

[cols = “,,,,,”、options = “header”、]| =========================================== ===========
| PERSON

ADDRESS

ID | PERSON

ID | CITY | STATE | COUNTRY | ZIP

CODE
| 101 | 10 |ラスベガス|ネバダ州| US | 88901
| 102 | 20 |カーソン|ネバダ州| US | 90220
| =========================================== ===========

1.4関数を呼び出す。私たちは関数を多くの方法で呼び出すことができます。ここでまずは
それは

SELECT文`で呼び出すでしょう。それから、私たちはそれを
`dbms

output.put

line

SELECT get__complete__address(10)DUALからの "Person Address";

-- 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.

パリンドロームは、単語、フレーズ、数字、または他の文字列です
これはマダムやレースカーのように、フォワードと同じものを後方に読み込みます。


https://en.wikipedia.org/wiki/Palindrome

2.1関数の作成。

CREATE OR REPLACE FUNCTION checkForPalindrome(inputString VARCHAR2)RETURN VARCHAR2 IS結果VARCHAR2(75);戻り値は次のとおりです。 reversedString VARCHAR2(50); BEGIN SELECT REVERSE(インプットストリング)INTO reversedString FROM DUAL; -  UPPERを使用して大文字と小文字の区別を無視する。

IF UPPER(inputString)= UPPER(reversedString)
      その後
      戻り値(inputString || '回文列である');
      END IF;
      RETURN(inputString || '回文ではありません。');
      
    END checkForPalindrome;/....

2.2関数を呼び出す。

SELECT checkForPalindrome( ‘COMPUTER’)FROM DUAL;
– 出力
– コンピュータは回文ではありません。

SELECT checkForPalindrome( ‘MAdam’)FROM DUAL;
– 出力
– MAdamは回文です。

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 number(5)主キー、
  PERSON

ID番号(5)参照人(person__id)、
  SALARY番号(8)、
  MONTH varchar2(9)、
  年番号(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テスト用のデータを挿入します。

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データを表示する。

select ** from PERSON;

[cols=",",options="header",]

| ================= | PERSON__ID | FULLNAME | 101 |マーク・フィール| =================

select ** from PERSON

SALARY

DETAILS;

[cols=",,,,",options="header",]

| ========================= | SALARY__ID | PERSON__ID | SALARY | MONTH |年| 1 | 101 | 15000 | 1月| 2016 | 2 | 101 | 15000 | 2月| 2016 | 3 | 101 | 15000 | 3月| 2016 | 4 | 101 | 18000 | APRIL | 2016 | 5 | 101 | 18000 | MAY | 2016 | 6 | 101 | 18000 | 6月| 2016 | 7 | 101 | 18000 | 7月| 2016 | 8 | 101 | 18000 | 8月| 2016 | 9 | 101 | 18000 | 9月| 2016 | 10 | 101 | 18000 | OCTOBER | 2016 | 11 | 101 | 18000 | NOVEMBER | 2016 | 12 | 101 | 18000 | DECEMBER | 2016 | ========================= ==============

3.4関数を呼び出す。

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;

出力

[cols=",,,",options="header",]

| ================= | FULLNAME |年次|年|税金|マーク・フィール| 207000 | 2016 | 62100 | ===========================

=== 参考文献

.  https://docs.oracle.com/cd/B19306__01/server.102/b14200/functions231.htm[ユーザー

定義された関数: -  Oracle公式ドキュメント
。 https://docs.oracle.com/cd/B19306__01/server.102/b14200/statements__5009.htm#i2153260[Create

機能: - オラクルの公式ドキュメント]

link://tag/function/[function]link://タグ/oracle/[oracle]link://タグ/palindrome/[palindrome]link://タグ/plsql/[plsql]