4月 26

MySQLで外部SQLファイルを読み込ませてデータベースやテーブルを作成するときによく使うのが、下記のコマンド。

mysql> SOURCE <外部ファイル名>;

この「SOURCE」がくせ者で、MySQLクライアントのビルドインツールなんですぅ。(ようは、MySQLクライアントの構文内でのみ有効ってこと)
MySQL Connector/C++なんかでプログラムを組むときやMySQL Query Browserで試験的にクエリを実行したいとき、この「SOURCE」をクエリとして使えると勘違いしやすいんです。
mysql クライアント上ではさもクエリのように振る舞うのに、プログラム内では「シンタックスエラー」となり、思考がスパイラル状態になります。

どうしても、プログラム内から外部ファイルで管理されているSQLを実行したい場合は、

    • 外部ファイルを読み込んでクエリをぶん投げる。
      [難点] 外部SQLファイルを同時配布したくない場合にどうするか。
    • mysql 構文をシェル(コンソール)プロセスに直接ぶん投げる。
      [難点] 外部プロセス発動になるので管理が面倒。
    • (時と場合によっては)ストアドプロシージャを使う。
      [難点] 後からアタッチするようなサブプログラムの場合、組み込むために外部からの供給が必要となり、堂々巡り。

だと思う。(他にもあると思うが手っ取り早い順で・・・)

開発にあたっていろいろ制約があり、外部SQLファイルは同時配布しないことになっていたので、外部のSQLファイルをプログラム内のリソースに取り込み、読み込んだリソーステキストをサーバにぶん投げることで「SOURCE」と同じような処理を実現したでやんす。まだ未検証だけど、読み込む外部ファイル(今回はリソースとして組み込んだファイル)のコメント等は無い方がいいか、もしくは読み込んだ先で余分なものを取っ払ってからクエリを投げた方が無難じゃないかなぁ~と思われ。

今回特殊な事情で、MySQLの「CREATE~FEDERATED」を使用しなくちゃいけなかったんだが、その話はまた後で出来ればと。

written by hiro \\ tags: , ,


Leave a Reply

*