MySQLのストアドプロシージャ、関数、

;パラメータ記憶処理がで使用することができる、ストアドプロシージャなしリターン値、および機能を有していなければならない:ストアドプロシージャおよび関数との差 - 1.1 2019年7月18日18時46ストアド・プロシージャは、説明された機能にsnowster(0)によって編集されたこの記事の最後のOUT、INOUTタイプ、機能だけではパラメータのタイプ。 - ストアドプロシージャの特性 - より複雑な計算と決意、および処理ロジックを完了するためには、データベース側にカプセル化され、発信者は自分のビジネスロジックに対処する必要はありませんが呼び出し先、ロジックの変更後、唯一、缶ストアドプロシージャを変更する必要が影響ありません。 - プログラマブル強い、柔軟 - SQLプログラミングコードの再利用可能な - 比較的速い実行速度 - ストアドプロシージャ1.2作成するためにお金を節約するために、ネットワークとの間のデータ伝送を減少 - を - ストアドプロシージャの区切りを作成$$(手順種皮の作成)BEGIN SELECT *学生FROM WHERE ID = 2; END $$ - ストアドプロシージャ呼び出しの種皮()を呼び出す; - チャールズ - 1.3チェックストアドプロシージャ/ファンクション、削除されたビューをステータスプロシージャまたは関数SHOW手順状況LIKE「種皮」を格納し、 - ストアドプロシージャDROP手順testa1を削除する; - - ビュー削除testa-プロシージャを作成するプロシージャまたは関数定義された番組を保存された機能DROP機能testa1を削除し、変数1.4ストアドプロシージャ - ニーズ:ID = 2を取るために変数を使用し、ストアドプロシージャを書きますユーザ名、変数my_uname区切り文字は)(PROCEDUREのtesta3をCREATE BEGIN $$ - ステートメント1.宣言変数を使用、ステートメントは、変数のみが使用後に宣言されなければならない、変数を宣言 - 2。変数のデータ・タイプと長さ、MySQLのSQLデータ型と一致し、そうであっても、デフォルト値が指定され、文字セットを有し、ソート規則は 'my_uname VARCHAR(32)DEFAULTを宣言し; - 前記変数が設定によって割り当てることができます、= 'itheima' SETのmy_unameに選択の仕方によって割り当てられ、学生からのmy_unameに名前をSELECT WHERE ID = 2; - 4.変数を返す必要があり、select文を使用することができ、例えば:変数名SELECT my_unameを選択し; ENDの$ $コールtesta3(); - 変数のスコープ - 変数の範囲は、開始および範囲エンドブロックとの間に、可変範囲の端部の端が終了されます。 - 前のすべてのコードブロックに、すなわちグローバル変数を使用することができ、複数のブロック間で値を渡す必要があります。 - パラメータ渡しは、グローバル変数である、プロシージャのパラメータを記憶された複数のブロックとの間に作用することができるタイプ1.5を通過した - 例えば - デマンド:ストアドプロシージャを書き込み、受信ID、ユーザ名区切り文字$$ CREATE PROCEDUREのgetNameを(返します、IN入力:渡すパラメータ - ; INTをmy_uid) 'のDECLARE my_uname VARCHAR(32)DEFAULT' BEGIN;(2)$$ CALLのgetName; WHERE ID = my_uid学生FROM my_unameに名前を選択します。my_unameを選択; END これは、ストアドプロシージャを呼び出すときに、このパラメータの値を明示的に示すように指定されていない場合、デフォルトはタイプであり、指定する必要があります表しています。 - 例えば - ストアド・プロシージャ・コールを変更し、値を返すために、所望であれば1.6 OUT型パラメータはプロシージャパラメータをOUT出力型を格納されて使用されてもよい - INタイプのパラメータは、一般に、ストアドプロシージャは、一般的に改変されていない、返さ呼び出し、着信のために使用されます - オンデマンド:ユーザーの入ってくるUIDのuname区切り文字は手順getName22(my_uid INT IN、OUT my_uname VARCHAR(32))CREATE $$返すために、ストアドプロシージャを呼び出すには、WHERE ID = my_uid学生FROM my_uname INTO SELECT NAMEをBEGIN; my_unameを選択; END;エイリアスがmyName AS @uname選択; - - ;コールgetName22(2、@用のuname); = '送信パラメータを: - $$着信パラメータ引数セットの@unameかどうかを指定変更することができるストアドプロシージャを呼び出します値、および返す - OUTは、パラメータが広がっているが、パラメータ値を渡すために使用することはできません - あなたはOUTパラメータも指定する必要があり、ストアドプロシージャを呼び出すとき、それは変数、定数であってはならないこと - の両方が同時に渡す必要がある場合に合格する必要があります - オンデマンド:ストアドプロシージャのパラメータmy_uを呼び出す例えば - アウト、あなたは1.7 INOUTの型パラメータ可変パラメータタイプINOUTのストアドプロシージャを使用することができます idとmy_unameは、また着信両方の送信パラメータデリミタはSET my_uid = 2 BEGIN(INOUTがINT、INOUT my_uname VARCHAR(32)my_uid)PROCEDURE getName3をCREATE $$; SET my_unameは= 'hxf3'; IDを選択し、my_uid、my_unameを選択; idが= my_uid学生FROM my_uidに名前、my_uname END; $$ SETの@uname:= ''; SET @uid:= 0; getName3(@ UIDは、@のuname)を呼び出し、AS @uname SELECTがmyName; - 変数変数INOUT:コールの値を渡すことができ、通話中に、その値を変更するだけでなく、戻り値にすることができます。 - 着信INOUT変数ではなく定数1.8ストアドプロシージャ条件文である場合 - 例えば: - デマンド:、ストアドプロシージャを書き込むユーザーUIDが他だけUID区切り文字を返す$$ CREATE PROCEDUREを、それがのunameを与えられた場合であってもですgetName44(my_uid INT IN)BEGIN DECLAREのmy_uname VARCHAR(32)DEFAULT ''; IFは(my_uid%2 = 0)THEN学生からID = my_uid my_unameに名前を選択します。my_unameを選択; ELSE my_uid SELECT; END IF; END; $ $ CALL getName44は、(1); getName44をCALL(2); - 条件文の基本構造:IF()、その後... ELSE ... END IF; 1。 - デマンド:使用ループ、10は内の連続記録テーブルユーザーのUID(UID)に挿入された - whileループ - 実施例9のストアドプロシージャをループします。WHILE(iは10 <)I SELECTをBEGIN DO;デリミタ()iはDEFAULT 0 INT DECLAREをBEGIN手順insertdataをCREATE $$ SET I = I + 1; INSERT INTOユーザ(名前、住所)VALUES( "サル"、 "広州" ); END; END WHILE; END; $$ CALLのinsertdata(); - 基本的な文の構造中:()...エンドしばらくない間; - 分析ロジックは、trueまたはfalseを返しながら、式は真または偽のいずれかのリターンかもしれ式 - 例 - ループを繰り返す: - デマンド:使用して繰り返しループをテーブルアーティクルUIDユーザ10の連続記録の区切りに挿入されているが(手順insertdata2をCREATE $$)iはDEFAULT 100 INT DECLAREをBEGIN; SELECT BEGIN Iを繰り返し、SET iが= I + 1; INSERT INTOユーザ(NAME)VALUES( 'ダークホース'); END; I> = 110 ENDのREPEAT UNTIL。END; $$ CALLのinsertdata3(); - 基本的な文の構造を繰り返し:繰り返し...まで...最後REPEAT; - 分析ロジックは、trueまたはfalseを返すまで、式は文の場合にのみになるまで、trueまたはfalseを返す任意の式でもありtrueの場合、ループは終了します。実質的に使用して1.10カーソル(カーソル) - 基本的な使用 - - ストアド・プロシージャおよび関数は、結果セットの処理サイクルで(時にはカーソルとも呼ばれる)カーソルを使用することができ、カーソルは次のように述べている。ためのカーソル - 開くカーソル:オープン - カーソルを移動します。 FETCH - カーソルのクローズ:最密例: - メモリの書き込み手順を、カーソルを使用して、レコードIDはユーザー名を更新しても、個別にです。デリミタがBEGIN)(手順testcursorをCREATE $$ - カーソルサイクル終了フラグDECLAREストップフラグintデフォルト0を制御するステップと、DECLARE my_uname VARCHAR(20); - カーソルのカーソルが学生の中から選択名のuname_cur CURSORを宣言記載WHERE ID%2 = 0。オープンuname_cur;;実測NOT SETのストップフラグ= 1のハンドラを続けるDECLARE - カーソルmy_unameにuname_cur FETCH開く; - 可変my_unameにレコードに取り込ま前方カーソルステップを、。まだの末尾にカーソル場合、 '、UPDATE学生のSET NAME = CONCAT(my_unameをBEGIN続ける - WHILE(ストップフラグ= 0)DO _cur「)WHERE NAME = my_uname; - フォワードカーソルステップ、可変my_unameにレコードに取り込ま。my_uname INTO uname_cur FETCH; END; END WHILE; CLOSE uname_cur; END; $$ DELIMITER; - 注意 - CALLのtestcursor()を呼び出す:が存在する間、変数条件、処理プログラム、カーソルをDECLAREによって定義され、オーダー要件、変数と条件はカーソルが宣言される前に、先頭の文でなければなりません、そして最終的にハンドラを述べることができます。 




image.png

おすすめ

転載: blog.51cto.com/14500648/2430031