プロシージャと関数の最も重要な違いは、呼び出される方法と目的が異なることです。これとは別に、プロシージャと関数の違いは次のとおりです。
プロシージャは値を返しません。代わりに、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 サイトの他の関連記事を参照してください。