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); #このハンドラがおかしい? #6月1日...ハンドラは今回使用しません。 /*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では、文字列が赤色で、変数が緑色になっていたような・・これも確認します。
少しずつわかってきました。
今度はカーソルのあるストアドを作りたいなー。
楽しみです。