プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

MySqlでストアドプロシージャを作成する

MySqlではSqlServerで使えていたRETURNが使えないので、HANDLERを使用する...みたいです。
未完成なのですが、忘れないようにメモ。

.....6月1日
HANDLERでは、希望の処理ができませんでした。

# workbenchで作成しているので、DELIMITERは省略して良い

CREATE PROCEDURE SP_MGR_SetLog
(
		IN aa VARCHAR(3)
		IN bb VARCHAR(10)
		OUT returnmsg VARCHAR(2000)
         OUT returnval int;
)
BEGIN

	DECLARE ssql VARCHAR(4000);

	#このハンドラがおかしい?
        #61日...ハンドラは今回使用しません。
	/*DECLARE con1 CONDITION for 1;
	DECLARE EXIT HANDLER for con1
	BEGIN
		SET returnmsg = '引数エラー';
	END;

	#例外エラー(インサート失敗した時)
	DECLARE EXIT HANDLER for SQLEXCEPTION
	BEGIN
		SET returnmsg = 'インサート失敗';
	END;*/

	IF (aa IS NULL) OR (aa = '')
	THEN
                #エラーを検知するのはここで行なっている
                #が、条件のIF文が以下に続くので、エラーは書き換えられてしまう
		SET returnmsg = '必須項目が未設定';
                SET returnval = 0;
	END IF;

	IF NOT bb ='おはよう' OR bb='こんにちは'
	THEN
		SET returnmsg = '項目の値が間違ってます。';
                SET returnval = 0;
	END IF;

	#その後、処理が多々...省略

        #INSERTはこのように準備してから実行させる。
	PREPARE ssql From 'INSERT INTO aa VALUES(?,?);'
		SET @a = a;
		SET @b = b;
	EXECUTE ssql USING @a,@b;

END;

INSERT文でコーテーションを考えなくてもよかったので、とても楽になりました。
このprepareは、インジェクションの考え方と同じ(これはよくわからないので、調べる)だそうです。

また、MySqlでは文字列と認識されると緑色になります。
・・SqlServerでは、文字列が赤色で、変数が緑色になっていたような・・これも確認します。


少しずつわかってきました。
今度はカーソルのあるストアドを作りたいなー。
楽しみです。