MySQLのストレージ関数(カスタム関数)の定義と使用方法の詳細について
2178 ワード
きおくかんすう
ストレージ関数とは:sqlコードをカプセル化し、特定の機能を完了し、結果を返します.
関数を格納する構文:
create
function
関数([関数パラメータ[,....]))
Returns
戻りタイプ
Begin
If(
Return
(返されるデータ)
Else
Return
(返されるデータ)
end
if;
end
;
例:create function count_news(hits int) returns int
ストアド・プロシージャの戻りパラメータとは異なり、ストアド・関数は定義時にどの変数が戻りパラメータであるかを直接宣言するのではなく、returnsを使用して戻りパラメータが属するデータ型を宣言し、戻りパラメータは関数体でreturnを使用して戻りたいデータ変数を返す形式で表されます.なお、記憶関数は入力パラメータのみをサポートする、入力パラメータの前にINやINOUTはない.
ストレージ関数の制限
フロー制御(Flow-of-control)文(IF,CASE,WHILE,LOOP,WHILE,REPEAT,LEAVE,ITERATE)も合法的である.
変数宣言(DECLARE)および割り当て(SET)は合法的である.
許可条件宣言
異常処理宣言も許容する.
ただし、ここでは、関数にテーブルにアクセスできないという制限条件があることを覚えておく.したがって、関数で次の文を使用するのは不正です.
ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL LOCK OPTIMIZE REPAIR REPLACE REVOKE ROLLBACK SAVEPOINT 'SELECT FROM table' 'SET system variable' 'SET TRANSACTION' SHOW 'START TRANSACTION' TRUNCATE UPDATE
ストレージ関数とストレージ・プロシージャの違い
一、記憶関数には1つの戻り値があり、記憶プロセスには戻り値がありません.
二、関数には入力パラメータしかなく、inを持ってはいけないが、ストレージプロセスには複数のin,out,inoutパラメータがあることができる.
三、記憶過程の文の機能はもっと強くて、記憶過程は複雑な業務ロジックを実現することができて、関数は多くの制限があって、例えば関数の中でinsert、update、delete、createなどの文を使うことができません;ストレージ関数はクエリーの作業のみを完了し、入力パラメータを受け入れて結果を返すことができます.つまり、関数が実現する機能は比較的強いです.
四、ストレージプロセスはストレージ関数を呼び出すことができる.ただし、関数はストレージ・プロシージャを呼び出すことはできません.
五、記憶プロセスは一般的に独立した部分として実行される(call呼び出し).関数は、クエリ文の一部として呼び出すことができます.
例1:
Id
Name
QQ
phone
1
秦雲
10102800
13500000
2
道にいる
10378
13600000
3
LEO
10000
13900000
Id
Name
搭乗時間
管理者
1
秦雲
2004-1-1
李大偉
2
秦雲
2005-1-1
馬化騰
3
道にいる
2005-1-1
馬化騰
4
秦雲
2005-1-1
李大偉
5
道にいる
2005-1-1
李大偉
実現目的:
表1から全員のリストを取り、表2から機の回数と管理者を取り出す.
搭乗人員名簿の搭乗回数管理者秦雲3李大偉、馬化騰、李大偉は路上で2馬化騰、李大偉LEO 0
変換元:https://www.jb51.net/article/136703.htm
ストレージ関数とは:sqlコードをカプセル化し、特定の機能を完了し、結果を返します.
関数を格納する構文:
create
function
関数([関数パラメータ[,....]))
Returns
戻りタイプ
Begin
If(
Return
(返されるデータ)
Else
Return
(返されるデータ)
end
if;
end
;
例:create function count_news(hits int) returns int
ストアド・プロシージャの戻りパラメータとは異なり、ストアド・関数は定義時にどの変数が戻りパラメータであるかを直接宣言するのではなく、returnsを使用して戻りパラメータが属するデータ型を宣言し、戻りパラメータは関数体でreturnを使用して戻りたいデータ変数を返す形式で表されます.なお、記憶関数は入力パラメータのみをサポートする、入力パラメータの前にINやINOUTはない.
ストレージ関数の制限
フロー制御(Flow-of-control)文(IF,CASE,WHILE,LOOP,WHILE,REPEAT,LEAVE,ITERATE)も合法的である.
変数宣言(DECLARE)および割り当て(SET)は合法的である.
許可条件宣言
異常処理宣言も許容する.
ただし、ここでは、関数にテーブルにアクセスできないという制限条件があることを覚えておく.したがって、関数で次の文を使用するのは不正です.
ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL LOCK OPTIMIZE REPAIR REPLACE REVOKE ROLLBACK SAVEPOINT 'SELECT FROM table' 'SET system variable' 'SET TRANSACTION' SHOW 'START TRANSACTION' TRUNCATE UPDATE
ストレージ関数とストレージ・プロシージャの違い
一、記憶関数には1つの戻り値があり、記憶プロセスには戻り値がありません.
二、関数には入力パラメータしかなく、inを持ってはいけないが、ストレージプロセスには複数のin,out,inoutパラメータがあることができる.
三、記憶過程の文の機能はもっと強くて、記憶過程は複雑な業務ロジックを実現することができて、関数は多くの制限があって、例えば関数の中でinsert、update、delete、createなどの文を使うことができません;ストレージ関数はクエリーの作業のみを完了し、入力パラメータを受け入れて結果を返すことができます.つまり、関数が実現する機能は比較的強いです.
四、ストレージプロセスはストレージ関数を呼び出すことができる.ただし、関数はストレージ・プロシージャを呼び出すことはできません.
五、記憶プロセスは一般的に独立した部分として実行される(call呼び出し).関数は、クエリ文の一部として呼び出すことができます.
例1:
Id
Name
phone
1
秦雲
10102800
13500000
2
道にいる
10378
13600000
3
LEO
10000
13900000
Id
Name
搭乗時間
管理者
1
秦雲
2004-1-1
李大偉
2
秦雲
2005-1-1
馬化騰
3
道にいる
2005-1-1
馬化騰
4
秦雲
2005-1-1
李大偉
5
道にいる
2005-1-1
李大偉
実現目的:
表1から全員のリストを取り、表2から機の回数と管理者を取り出す.
搭乗人員名簿の搭乗回数管理者秦雲3李大偉、馬化騰、李大偉は路上で2馬化騰、李大偉LEO 0
変換元:https://www.jb51.net/article/136703.htm