MySQLの関数

8006 ワード

関数とは
紹介:
事前にコンパイルされ、データベースに格納されたSQL文のセットを経て、バッチ文が理解されます.
メリット:
  • sql , 。
  • は、データベースとアプリケーション・サーバ間のデータの転送を削減します.
  • は、データ処理の効率を向上させる.

  • 関数とストアド・プロシージャの違い:
    関数:
    キーワード:FUNCTION呼び出し構文:SELECT ()    
    適用シーン: , 。ストアド・プロシージャ:
    キーワード:PROCEDURE呼び出し構文:CALL ()     0 .
    適用シーン: 、 。関数の作成
    構文:
    CREATE FUNCTION関数名(パラメータリスト)RETURNS戻りタイプ  BEGIN        END
    パラメータのリスト:
    パラメータ名パラメータタイプ      delimiter ( :delimiter $
    コードの例:
    delimiter $
    
    CREATE FUNCTION    (         ,...) RETURNS     
    BEGIN
    
           
        return  ;
    
    END $

    ヒント:
    関数体には必ずreturn文がありますが、エラーが報告されていない場合は、return文が関数体の最後に置かれていない場合もエラーは報告されませんが、推奨されません.
    関数体に一言だけある場合はbegin endを省略できます.
    呼び出し関数
    構文:
    SELECT関数名(パラメータリスト);
    コードの例:
    /*
     * 1.     
     */
    #  :         
    DELIMITER $
    CREATE FUNCTION myf1() RETURNS INT
    BEGIN
    
        DECLARE c INT DEFAULT 0;#      
        SELECT COUNT(*) INTO c#  
        FROM employees;
        RETURN c;
        
    END $
    #  
    SELECT myf1()$
    
    
    /*
     * 2.     
     */
    #  1:     ,      
    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 $
    #  
    SELECT myf2('k_ing') $
    
    #  2:     ,          
    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 $
    #  
    SELECT myf3('IT')$
    
    #  3:      float,      
    DELIMITER $
    CREATE FUNCTION myf4(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
    BEGIN
    
        DECLARE SUM FLOAT DEFAULT 0;
        SET SUM = num1 + num2;
        RETURN SUM;
    
    END $
    #  
    SELECT myf4(1,2)$

    関数の表示
    構文:
    SHOW CREATE FUNCTION関数名;
    コードの例:
    SHOW CREATE FUNCTION myf3;

    関数の削除
    構文:
    DROP FUNCTION関数名;
    コードの例:
    DROP FUNCTION myf3;