2010年8月26日

[mysql 15385] Re: [mysql 15384] SP中でのVARCHARの比較について

初めまして。

プロシージャの実行環境が明記されていませんが
MySQL 5.0.77
で実行してみたところ、自分の環境では特に問題が発生しませんでした。

以下、ちょっと煩雑ですが、実行したクエリと結果になります。
CREATE TABLE `test` (`id` int(11) NOT NULL auto_increment, `txt`

varchar(16) NOT NULL, KEY `idx_test_id`(`id`)) ENGINE=InnoDB;
insert into test values (0,'a'),(0,'b'),(0,'c');

DROP PROCEDURE IF EXISTS proc_test;
delimiter //
CREATE PROCEDURE proc_test(
in_exec_kbn varchar(16)
)
BEGIN

select count(*) into @my_count from test where txt=in_exec_kbn;
select @my_count;

END;
//
delimiter ;


mysql> call proc_test('a');
+-----------+
| @my_count |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

2010年8月26日9:28 こんにちは伊藤です <ito.takahiro.cp@xxxxx>:
> 最近MySQLのストアドに取り組み始めました。
> 伊藤です。
>
> ストアド中のSQL文で分からない点がありますので質問させてください。
> たぶん単純なことだと思います。
> 下記のようなvarchar型のTBL.colに変数をそのまま比較させると落ちるようです。
> INT型なら同じようなことはありません。varcharはそのままの比較って出来なかっ
> たりするのでしょうか?
>
>
>
> 落ちる方
> CREATE PROCEDURE test(
> ?in_exec_kbn ?varchar(16)
> )
> BEGIN
>
> ?select count(*) into @my_count from TBL where col=in_exec_kbn;
>
> END;
>
>
> 落ちない方(あたり前ですが)もちろん意図した結果は得られません。
> CREATE PROCEDURE test(
> ?in_exec_kbn ?varchar(16)
> )
> BEGIN
>
> ?select count(*) into @my_count from TBL where col='in_exec_kbn';
>
> END;
>
>
>
> -------------------------------------------------
> 伊藤崇洋
> ito.takahiro.cp@xxxxx
> -------------------------------------------------
>
>
>

投稿者 xml-rpc : 2010年8月26日 10:22
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97928
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。