Mysql——関数

8091 ワード

一、関数概要 はストレージプロセスと同様に、関数も予めコンパイルされたSQL文のセットであり、その長所と短所もストレージプロセスと同様に、作成後、何度も呼び出すことができ、コードの再利用性を高め、同時にSQL文のコンパイル回数とサーバーとの接続回数を減らし、効率を高めた. ストレージ・プロシージャとは異なり、ストレージ・プロシージャには任意の戻り値(0を含む)があり得るが、関数には戻り値が1つしかなく、必要である.ストレージ・プロシージャは、バッチの挿入、更新、削除などに適しており、関数はデータ処理後に結果を返すのに適しています.
二、関数の作成と呼び出し
DELIMITER $
CREATE FUNCTION    (    ) RETURNS      
BEGIN
	   ;
END $
DELIMITER ;

  説明:   1️⃣関数のパラメータリストとストレージ・プロシージャは少し異なり、関数のパラメータ・リストにはパラメータ名とパラメータ・タイプ2の2つの部分しかありません.️⃣関数体はストアド・プロシージャと同様に、正当なSQL文のセットですが、関数体には結果を返すためのRETURN文が含まれている必要があります.このRETURN文は一般的に関数体の最後に置かれています.もちろん、最後に置かなくても間違いはありませんが、このような️⃣関数体が1つしかない場合は、BEGINとENDキーワード 2を省略し、CALLではなくSELECTを使用して  関数を呼び出す呼び出しを使用することもできます.
SELECT    (    );

 3、例  ①パラメータなし
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGIN
	DECLARE c INT DEFAULT 0;#        ,       
	SELECT COUNT(*) INTO c #  
	FROM employees;
	RETURN c; #     RETURN
END $
DELIMITER ;

#  
SELECT myf1();

  ②パラメータ  aがあり、従業員の名前に基づいて給与を返す
DELIMITER $
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
	SET @sal = 0;#               ,               
	SELECT salary INTO @sal #  
	FROM employees
	WHERE last_name = empName;
	RETURN @sal;
END $
DELIMITER ;

#  
SELECT myf2('Hunold');

  b、支局部門名その平均賃金を照会する
DELIMITER $
CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
BEGIN
	DECLARE sal DOUBLE; #        ,             
	SELECT AVG(salary) INTO sal #  
	FROM employees e
	JOIN departments d ON e.department_id = d.department_id
	WHERE d.department_name = deptName;
	RETURN sal; #    
END $
DELIMITER ;

#  
SELECT myf3('IT');

2つの小数の和を計算する
DELIMITER $
CREATE FUNCTION myf4(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
BEGIN
	RETURN num1 + num2; #    ,  BEGIN END    
END $
DELIMITER ;

#  
SELECT myf4(1.2,2.3);

三、関数の表示と削除 1、表示
SHOW CREATE FUNCTION    ;

 2、削除:ストレージプロセスと同様に、関数も一度に複数の削除をサポートしない
DROP FUNCTION    ;

Tip:ストレージ・プロシージャと同様に、関数も変更をサポートしません.