ホームページ  >  記事  >  データベース  >  MySQL 関数とプロシージャの最も大きな違いは何ですか?

MySQL 関数とプロシージャの最も大きな違いは何ですか?

WBOY
WBOY転載
2023-09-17 22:49:021246ブラウズ

MySQL 函数和过程之间最显着的区别是什么?

プロシージャと関数の最も重要な違いは、呼び出される方法と目的が異なることです。これとは別に、プロシージャと関数の違いは次のとおりです。

  • プロシージャは値を返しません。代わりに、CALL ステートメントを使用して呼び出され、テーブルの変更や取得されたレコードの処理などの操作が実行されます。

    一方、関数は式内で呼び出され、式で使用される単一の値を呼び出し元に直接返します。つまり、関数は、定数、組み込み関数、またはテーブル列への参照と同じように式で使用できます。

  • CALL ステートメントを使用して関数を呼び出すことはできません。式内でプロシージャを呼び出すことはできません。

  • ルーチン作成の構文は、次のようにプロシージャや関数とは若干異なります。

CREATE
   [DEFINER = { user | CURRENT_USER }]
   PROCEDURE sp_name ([proc_parameter[,...]])
   [characteristic ...] routine_body

CREATE
   [DEFINER = { user | CURRENT_USER }]
   FUNCTION sp_name ([func_parameter[,...]])
   RETURNS type
   [characteristic ...] routine_body

proc_parameter:
   [ IN | OUT | INOUT ] param_name type

func_parameter:
   param_name type

type:
   Any valid MySQL data type

characteristic:
   COMMENT 'string'
   | LANGUAGE SQL
   | [NOT] DETERMINISTIC
   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
   | SQL SECURITY { DEFINER | INVOKER }

routine_body:
   Valid SQL routine statement
  • プロシージャ パラメータは次のことができます。入力のみ、出力のみ、または入力と出力の両方として定義できます。これは、プロシージャが出力パラメータを使用して呼び出し元に値を渡すことができることを意味します。これらの値は、CALL ステートメントに続くステートメントでアクセスできます。

    一方、関数には入力パラメータのみがあります。したがって、プロシージャと関数の両方にパラメータを含めることができますが、プロシージャのパラメータ宣言構文は関数のパラメータ宣言構文とは異なります。

  • 関数は値を返すため、関数定義には戻り値のデータ型を示す RETURNS 句が必要です。さらに、呼び出し元に値を返すには、関数本体内に少なくとも 1 つの RETURN ステートメントが必要です。

    一方、RETURNS と RETURN はプロシージャ定義には現れません。

    li>

以上がMySQL 関数とプロシージャの最も大きな違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。