Open Source WEB

ところで、CONCAT( s, ':', HEX(s), ':', CHARSET(s) ) という処理で 戻り値の文字列をでっちあげ、その後この文字列を RETURN CHARACTER SET binary ということで無理矢理binaryにして戻していた。 さて、CONCATした直後の文字列のキャラクタセットは何になっているのだろうか。

いままで、ファンクションの中の処理は、RETURN の直後に直接書かれていたが、 これでは複雑な処理ができないので、 BEGIN〜END で本体を囲む構文を用いることにする。

手始めに、今までの parametercharset の本体部分を BEGIN〜END で囲ったものを 作って、動作確認しておこう。

mysql> drop function parametercharset;
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELIMITER //
mysql> CREATE FUNCTION parametercharset( s CHAR(20) CHARACTER SET eucjpms )
    -> RETURNS CHAR(50) CHARACTER SET binary
    -> DETERMINISTIC
    -> BEGIN
    ->   RETURN CONCAT( s, ':', HEX(s), ':', CHARSET(s) );
    -> END//
Query OK, 0 rows affected (0.05 sec)
 
mysql> DELIMITER ;
mysql> SELECT parametercharset('漢字');
+----------------------------------------------------+
| parametercharset('漢字')                           |
+----------------------------------------------------+
| 漢字:B4C1BBFA:eucjpms                              |
+----------------------------------------------------+
1 row in set (0.04 sec)
 
mysql>

とくに問題なく動作しているようだ。

RETURN する前で色々調べてみることにしよう。 まず、CONCAT している各要素のキャラクタセットを求めておこう。 いちいち CONCAT して戻り値となる文字列の中に埋めこむのも面倒なので、 SELECT で直接情况をみてみることにしよう。

mysql> DROP FUNCTION parametercharset;
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELIMITER //
mysql> CREATE FUNCTION parametercharset( s CHAR(20) CHARACTER SET eucjpms )
    -> RETURNS CHAR(50) CHARACTER SET binary
    -> DETERMINISTIC
    -> BEGIN
    ->   SELECT CHARSET(s), CHARSET(HEX(s)), CHARSET(CHARSET(s));
    ->   RETURN CONCAT( s, ':', HEX(s), ':', CHARSET(s) );
    -> END//
ERROR 1415 (0A000): Not allowed to return a result set from a function
mysql> DELIMITER ;
mysql>

エラーが出てしまった。 result set をファンクション中で戻すと解釈されてしまったようだ。 プロシージャなら出来るはずなんだが、 ファンクションとはそういうもののようである。

ということで、SELECT文を使って、キャラクタセットを返すのは駄目なようなので、 別の手を考えよう。

別の手として、変数にぶちこんで、後から見ることをやってみよう。

アイデアが思い浮かんだところで、今日は終りにしよう。


戻る:文字列パラメータの中味を調べてみよう

次へ:ファンクションの本体中での情况を覗き見るには


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us