Comments
Description
Transcript
はじめに
はじめに 本書の目的 InterBase は、米国インターベースソフトウェア社により開発されたリレーショナルデータベー ス( RDB )です。米国では 1986 年から販売されていて、全世界で百万本もの出荷実績があります。 日本でも Windows95/NT 版がボーランド社*1 から販売されるようになってからは、多くの人々 に使われるようになってきました。しかし、InterBase はもともと UNIX ワークステーション用 に開発されたもので、その性能、機能は日本でよく知られている他のデータベースに引けをとり ません。 先頃、この InterBase の Intel 系 Linux へのポーティングが完了しました。Linux は現在では、 世界中の非常に多くの人々に使用されています。おそらく本書を手にされた方も、すでに Linux を使われているか、もしくはこれから使ってみようと考えておられる方だと思います。 本書は、Linux 上で個人でデータベースを使用することや、そのデータベースをネットワークを 介して複数の Windows クライアントなどから使用すること、さらにはインターネット関連サー ビスで利用することなどを検討されている方に、InterBase を使ってみていただくことを目的と しています。 したがって、InterBase の特徴や基本的な使用方法のみならず、実際にアプリケーションを作 成する方法も具体的な事例を用いて解説しています。付属の CD-ROM には、InterBase 4.0 for Linux( 以降は、Linux 版 InterBase と記述します)の体験版*2 と、本書の解説で用いたアプリ ケーションが含まれています。これらを実際に使いながら本書を読み進めていただくことで、よ り理解を深めていただけることと思います。 ぜひこの Linux 版 InterBase をインストールして使ってみてください。実際に使っていただけ れば、すぐにその良さを感じていただけると思います。そして、InterBase の使用方法やアプリ ケーションの作成方法を理解するために、本書を活用していただければ幸いです。 前提条件 本書は、InterBase の特徴や使用方法について詳しい解説を行っているので、RDB を使った経 験のない方にも理解していただくことができると思います。しかし、RDB の基本的な概念や用語 などについての解説は行っていません。 *1 米国では 1998 年 4 月 29 日に、日本では 1998 年 6 月 8 日に「インプライズ社」に社名変更されました。 *2 使用期限は設定していないので、半永久的に使っていただくことができます。 3 はじめに また、InterBase のインストール手順やデータベースの作成手順などについての解説は、Linux の基本的なコマンドやエディタの使用方法を理解されていることを前提として行っています。 さらに、Linux 上の InterBase を PC クライアントから使用する方法についての解説では、3 種 類の異なる接続形態のアプリケーションを例にあげて、その作成手順の詳細を記述しています。 しかし、使用する Delphi 、Excel 、Python などのツールのインストール方法や基本的な操作方法 などは、すでに理解されていることを前提としています。 表記規則 本書では、UNIX のコマンドや SQL 文を表記するときに、字体の違いやカッコなどを使用し て、キーワードとパラメータの区別や、省略可能なパラメータなどを表現しています。以下はそ の表記規則を示したものです。 表記 説明 斜体 UNIX のファイル名やデータベースのテーブル、フィールド名など、使用環境に応じて変わる 可能性のあるパラメータなどを表します。 <斜体> 上記パラメータのうち、さらにいくつかのキーワードやパラメータで構成されるものを表しま す。 [] 省略可能なキーワードやパラメータを表します。 ... [] で囲まれたキーワードやパラメータを、繰り返して記述できることを表します。 {|} {}内の|で区切られたいくつかのキーワードなどの中から、1 つを選択して記述できることを表 します。 また、リレーショナルデータベースにおけるテーブルの縦方向、横方向のデータの集まりを指 す言葉にはさまざまなものがありますが、本書では「フィールド」、「レコード」という言葉を使 用します。これらは、それぞれ以下のものと同じものを指します。 ● フィールド=列、カラム ● レコード=行、ロー インストール 動作条件 以下は、Linux 版 InterBase を使用するために必要な環境です。 ● OS:Linux 2.0( Intel プロセッサ用のもの) 以下は動作確認済みのディストリビューション名と Linux カーネルのバージョンです。ただ し、これら以外のディストリビューションや、バージョンの異なるカーネルでは動作しない 4 インストール というわけではありません。 ● Slackware Linux 2.0.29 、2.0.33 Red Hat Linux 2.0.30 ライブラリ( 数字は動作確認済みのライブラリのバージョンです) libc 5.3.12 libdl 1.7.14 ● ディスク容量( インストール時に必要なディスク容量です) 約 11MB インストールの前に Linux 版 InterBase をインストールするために必要な作業は、インストールスクリプトにより すべて自動的に行われます。ただし、インストールスクリプトは、最初に2つのことを指示する よう求めてきます。1つは、InterBase をインストールするディレクトリ、もう1つは、製品の含 まれているアーカイブファイル名です。 インストールディレクトリは、「 /usr/interbase 」以外で、空きディスク容量が 11MB あればど こでもかまいません。また、付属の CD-ROM でインストールを行う場合のアーカイブファイル 名は、最上位のディレクトリにある interbase.tar です。 追加・変更されるファイル インストールスクリプトにより、以下のディレクトリにシンボリックリンクが作成されます。 ディレクトリ シンボリックリンク 参照先 /usr interbase InterBase をインストールしたディレクトリ /usr/include gds.h /usr/interbase/include/gds.h ibase.h /usr/interbase/include/ibase.h libgds.a /usr/interbase/lib/gds.a libgds_pyxis.a /usr/interbase/lib/gds_pyxis.a libgdsflib.so.0.0 /usr/interbase/lib/gdsflib.so.0.0 libgdsintl.so /usr/interbase/lib/gdsintl libgdslib.so.0.1 /usr/interbase/lib/gdslib.so.0.1 libgdslib.so.1.0 /usr/interbase/lib/gdslib.so.1.0 libgdslib.so /usr/lib/libgdslib.so.1.0 /usr/lib 5 はじめに また、以下のシステムファイルの末尾に、それぞれ以下の行が追加されます。 /etc/inetd.conf # # Borland International InterBase Database Server # gds_db stream tcp nowait root /usr/interbase/bin/gds_inet_server gds_inet_server /etc/services # # Borland International InterBase Database Remote Protocol # 3050/tcp gds_db インストール手順 以下は、Linux 版 InterBase のインストール手順です。 1 Linux にスーパーユーザー( root )でログインします。 2 付属の CD-ROM をドライブに挿入し、マウントします。 # mount -r /dev/cdrom /mount_dir ( デバイス名/dev/cdrom は、システムによって異なる場合があります) 3 InterBase のインストールスクリプトを起動します。 # /mount_dir/install 4 インストールスクリプトの問い合わせに対して該当事項を入力します。問い合わせの各プ ロンプトでは、デフォルト値が [] 内に表示されます。デフォルト値を変更する必要がない 場合は、 Enter のみを押してください。以下は、インストールスクリプトの出力内容です。 InterBase Installation of V4.0G : Continue with the installation? [y]: 1. インストールを継続するかどうかの確認の問い合わせです。継続する場合は、 押します。 6 Enter を インストール : This installation will create the directory tree interbase/i586_V4.0G under the root directory most appropriate for your installation. Enter the root directory you wish to use [/home/hostname]: 2. インストールディレクトリの問い合わせです。表示されているデフォルトディレクトリ 以外のディレクトリにインストールを行う場合には、ディレクトリ名をフルパスで入力 します。ただし、「 /usr/interbase 」は指定しないでください。インストーラは、/usr にインストールディレクトリを指すシンボリックリンク interbase を作成します。 Enter Archive name [/cdrom/interbase.tar]: 3. InterBase 製品のアーカイブファイル名の問い合わせです。CD-ROM を/cdrom 以外 のディレクトリにマウントした場合は、そのディレクトリ名を含んだアーカイブファイ ル名をフルパスで入力します。 Using /mount_dir/interbase.tar : Press Return to continue 4. Enter を押します。 Reading files from archive... bin/ bin/gpre bin/gds_pipe bin/gfix bin/gds_lock_mgr : : Building Interbase sample databases and checking system network files. Depending on your machine configuration, this may take from 1 to 5 minutes. 5. インストールが完了すると、以下のようなメッセージが表示されます。 This completes the InterBase installation script. reboot the node that you have installed on. 5 Please be sure to システムをリブートします。 7 はじめに インストールの確認 インストールが正しく行われたことを確認するために、会話型データ操作ツール isql を使用し て、サンプルデータベースへの接続を行います。コマンドパスに/usr/interbase/bin を設定して おけば、パス名は省略できます。 1 UNIX のコマンドラインで、以下のように入力します。 % /usr/interbase/bin/isql すると、以下のようなメッセージとプロンプトが表示されます。 Use CONNECT or CREATE DATABASE to specify a database SQL> 2 以下のように入力し、サンプルデータベースへ接続します。 SQL> CONNECT /usr/interbase/examples/v3/atlas.gdb; SQL> インストールが正しく行われている場合は、接続が完了し、プロンプトが表示されます。 プロンプトに対して SQL 文や isql の拡張コマンドを入力し、実行させることができます。 SQL> SHOW TABLES; BASEBALL_TEAMS CITY_TON CITIES CROSS_COUNTRY : SQL> SHOW TABLE baseball_teams; TEAM_NAME (TEAM_NAME) VARCHAR(15) Nullable CITY (CITY) VARCHAR(25) Nullable : SQL> SELECT team_name, city FROM baseball_teams; CITY TEAM_NAME =============== ========================= Yankees Mets 3 8 New York New York : isql を終了させるには、「 QUIT 」を入力します。 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 1 第1章 LinuxとInterBaseについて この章では、Linux 、InterBase それぞれの特長と、これらを組み合わせて使うことのメリット を紹介します。 1.1 Linuxとは 現在 Linux は、たいへん多くの人々に使用されています。また、インターネット上で公開され ているドキュメントや、市販されている関連書籍もたいへん豊富です。したがって、Linux の歴 史や特徴をここで改めて説明する必要はないと思いますが、本書で Linux 版 InterBase の紹介を していくにあたって、特に関連の深いことのみに触れておきたいと思います。 Linux は言うまでもなく UNIX のクローン OS で、当初は Intel 386 以上の CPU を持つ IBM PC/AT 互換機をターゲットとして開発されたものです。最近では、パソコンの性能がたいへん 向上しているにもかかわらず、その価格はずいぶんと安くなってきています。また、Linux 自身 はたいへん軽く、それほど高性能ではないパソコンでも快適に使うことができます。その結果、 ワークステーションよりもかなり安いコストで、処理速度の面でも同等またはそれ以上の UNIX マシンを構成することが可能となります。Linux は、安定したマルチユーザー、マルチタスク環 境や、セキュリティの高さなどの UNIX の特長も当然備えているので、ネットワーク内のサーバ マシンの OS としても問題なく使用できます。 ところで、現在は Debian GNU/Linux、Red Hat Linux 、Slackware Linux など、多くのディ ストリビュータによる Linux の配布が行われています。しかし、厳密に言うと「 Linux 」とはカー ネル部分のみを指していて、ほとんどのディストリビュータは、共通の「 Linux 」カーネルと、異 なるインストーラやウィンドウシステムなどをまとめてパッケージにしています。したがって、 15 第1章 Linux と InterBase について 「はじめに」の中の「動作条件」において、Linux 版 InterBase の動作確認をどのディストリビュー タのパッケージの上で行ったかについて記述しましたが、決してそれらの上でしか動作しないと いうわけではありません。むしろ、その他のパッケージ上でも動作する可能性のほうが高いと思 われます。 1.2 InterBaseとは InterBase は、当初 UNIX ワークステーション向けのリレーショナルデータベースとして米国イ ンターベースソフトウェア社により開発され、1986 年に同社が販売を始めました。しかし、1989 年には当時 dBASE を販売していた米国アシュトン・テイト社が、インターベースソフトウェア社 の筆頭株主となり、さらに 1991 年に米国ボーランドインターナショナル社( 現インプライズ社) が、アシュトン・テイト社を吸収合併したことにより、InterBase は dBASE とともにボーランド インターナショナル社から販売されるようになりました。 日本では、日本語対応された InterBase JA3.2 の販売が 1993 年から開始され、さらに 1995 年 には、日本語処理機能などを含んだインターナショナルバージョンの InterBase4.0 がリリースさ ました。Windows 版などが登場したのはこのバージョンからです。 現在 InterBase の製品開発、サポートは、1997 年 4 月に設立された、ボーランドインターナ ショナル社の 100%出資のインターベースソフトウェア社により行われています。 InterBase は、その最初のリリースから約 10 年の間に、さまざまな経緯をたどって来ました。 そして、その間にさまざまな機能追加がなされてきました。しかし、最初のリリースから最新バー ジョンまで維持し続けている特長があります。それは、 「管理が簡単である」、 「頑丈である」、 「軽 い」ということです。 インストールは極めて簡単で、インストーラを起動してインストールするディレクトリを指定 するのみで、約 5 分もあればすべての作業が完了します。また、チューニングなどの煩わしい設 定を行う必要はほとんどありません。ディスク障害などに備えてのバックアップ、リストアも、 OS のコマンドレベルで簡単に行うことができます。 さらに、InterBase は、データベースの自動修復機能を持っています。たとえば、データベー スの更新中にシステムがダウンしてしまったような場合でも、再起動時には中止されたトランザ クションがロールバック*1 された状態で、直ちにデータベースを使用できます。これは、履歴型 アーキテクチャと呼ばれるレコードの管理方法によって実現されている機能です。 このように、データベースのチューニングや障害時の復旧作業を行う必要がなく、非常に簡単 に管理できるため、専門の知識を持ったデータベース管理者は必要ありません。 さらに、実行時に必要なメモリ容量は、使用するデータベースの構成や処理によって異なるた め具体的な数値をあげることはできませんが、たいへん少なくてすみます。 *1 データベースの更新を破棄し、元の状態に戻すことです。 16 1.3 Linux+InterBase の価値観 ボーランドインターナショナル社で、当時アジア太平洋地区のマーケティングディレクターで あった方の話によると、1992 年の湾岸戦争のときに、InterBase は戦場で使用されていたそうで す。戦場ではコンピュータの電源が瞬断し、システムがダウンすることが多く、そのようなこと が起こっても再起動時には直ちに使用可能になるということが、InterBase が使用された理由で あったようです。 1.3 Linux+InterBaseの価値観 それでは、Linux 上で InterBase を使用することには、どのようなメリットがあるでしょうか? その答えは、すでにあげた双方の特長から容易に推察していただけると思います。どちらも、 たいへん「軽い」ことから、これらをインストールして使用するためのマシンは、それほど高性能 である必要がないということです。言い換えれば、Linux と InterBase の組み合わせにより、非 常に低いコストで高性能なデータベースサーバを、ネットワーク内に置くことができるというこ とです。Windows 95 をインストールしてアプリケーションを動かすには少し無理があるのでは、 と思われるようなマシンであっても、データベースサーバの役割を果たすことができます。しか も、そのデータベースは、ネットワーク内の Windows クライアントからも容易に使うことがで き、さらにその管理には、ほとんど手間がかからないのです。 17 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 2 第2章 InterBaseの概要 InterBase の特長については、前にも少し触れました。しかし、InterBase が他のデータベース と最も異なっているのは、データベース内のレコードの管理方法として履歴型アーキテクチャを 採用していることです。 この章では、履歴型アーキテクチャのしくみや、InterBase 特有の機能についての解説を行い ます。さらに、Linux 版 InterBase の製品に含まれている会話型 SQL 操作ツール、バックアップ ユーティリティ、プリコンパイラなどの各種ツールについても解説します。 2.1 特徴 2.1.1 履歴型アーキテクチャ 履歴型アーキテクチャでは、レコードの更新や削除が行われるときに、元のレコードの内容が 単に上書きされるのではなく、新旧のレコードの差分のみからなる新しいレコードが作成されま す。この差分レコードが持つ情報は、最新のレコードから変更前のレコードを復元するために必 要な差分情報です。 ディスク上の古いレコードが格納されていた位置には最新の情報が格納され、差分レコードは 別の位置に格納されます。したがって、最新の情報を取り出すときに、履歴型であるためにオー バーヘッドが生じるということはありません。 変更前の古い情報が必要になるのは、主に2つの場合です。1つは、更新処理を行っているト ランザクションがなんらかの理由でロールバックして終了し、それまでに更新したデータを元に 戻す場合です。またもう1つは、あるトランザクションがデータを更新中で、ロールバックする 19 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 3 第3章 Linux版InterBaseの使用方法 ここからは、実際に Linux 版 InterBase を使って、データベースを定義する方法やアプリケー ションを作成する方法について、詳しく解説していきます。 この章では、データベースの作成手順と、isql によるデータベースの使用方法について解説し ます。可能であれば、InterBase のインストールを行った後に、本書の解説にしたがってデータ ベースを作成して使ってみてください。 3.1 SQLの基本 3.1.1 SQLの必要性 現在では、世の中のほとんどのリレーショナルデータベースが、データベースの操作言語とし て SQL をサポートしています。InterBase も、ANSI SQL-92( エントリレベル)、SQL-3( ドラ フトレベル)に準拠しています。 SQL では、テーブルの結合や副問い合わせなど、かなり複雑な操作を記述することができます。 当然このような場合は、SQL の構文も複雑なものになります。しかし、基本的な操作を行うため の SQL 文は、非常に簡単です。ここで、SQL を取り上げるのは、SQL が決してむずかしいもの ではない、ということを理解していただくためです。 クライアントツールの中には、SQL をあまり意識しなくてもデータベースの操作が行えるもの もあります。しかし、アプリケーション側で行うよりも、トリガーやストアードプロシージャで 行ったほうが、はるかに簡単に記述できる処理が数多くあります。また、このときのトリガーや ストアードプロシージャ内で使用する SQL 文も、簡単なものの組み合わせである場合が少なくあ りません。 35 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 4 第4章 ネットワークでの使用方法 Linux 版 InterBase をネットワークで使う場合、クライアントになり得るのは InterBase がイ ンストールされているマシンだけではありません。InterBase は、BDE や ODBC をサポートし ているので、Windows 上のさまざまなアプリケーションからの接続が可能です。 この章では、ネットワーク経由で InterBase を使う場合に、どのような接続方法が可能である かについて解説しています。また、そのときに必要となるミドルウェア、フロントエンドツール なども紹介しています。 4.1 BDEによる接続 BDE とは「 Borland Database Engine 」の略で、アプリケーションからデータベースを使うと きの共通のインターフェイスを提供するミドルウェアです。これにより、アプリケーションは、 BDE をサポートする異なるデータベースを、その違いを意識せずに使うことが可能になります。 また、BDE には ODBC(「 Open DataBase Connectivity」の略)ドライバを使って、データベー スに接続する機能も内蔵されています。したがって、アプリケーションは、ODBC をサポートす るデータベースを、同じ BDE のインターフェイスで使うことができます。 図 4-1 は、Windows 上のクライアントアプリケーションから、BDE を使って InterBase に接 続するときの構成を表したものです。 図 4-1 の IDAPI とは「 Integrated Database Application Programming Interface 」の略で、 ボーランド社独自の、アプリケーションからデータベースにアクセスするときの共通のインター フェイスです。ただし現在では、IDAPI という言葉は使われなくなり、BDE がそれと同じ意味 の言葉として使われています。ボーランド社の dBASE や、現在は他社に移管された Paradox に 89 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 5 第5章 アプリケーションの作成:概要 ここまでの章では、データベースの定義方法、SQL によるデータベースの操作方法、および InterBase のネットワークでの使用方法について解説してきました。これで、InterBase を使った アプリケーションを作成するための準備はすべて整いました。 この章から第 8 章では、Windows クライアントなどから、Linux 上の InterBase を使用する アプリケーションの作成方法について解説します。3つの例( Delphi 、Excel 、および Python に よる CGI スクリプトを使う場合)を取り上げていますが、それらは同じデータベースを使用する、 同じ機能を持ったアプリケーションの作成例です。この章では、第 6 章から第 8 章までで作成す るアプリケーションの概要と、それらが共通に使用するデータベースの作成手順を解説します。 5.1 アプリケーションの概要 この章から第 8 章までで作成するのは、社内やグループでの情報共有をテーマとしたアプリケー ションです。同じ目的で集まったグループでは、その各メンバーが同じ情報を必要とする場合が 少なくありません。たとえば、ソフトウェア開発を行っているグループでは、テクニカルレポー ト、プログラムのソース、および技術情報が載っている Web ページの URL などがあげられます。 このような情報に、その内容の簡単な説明と、そのジャンルなどの属性を付けて、Linux 上の データベースに登録しておきます。そうすると、他のメンバーは、ジャンルや説明文の中に含ま れているキーワードによって必要な情報を検索し、取り出すことが可能になります。当然これら の操作は、ネットワーク内の他のマシンからも行うことができます。さらに、CGI プログラムを 使うことにより、インターネット経由で遠隔地から操作することも可能になります。 95 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 6 第6章 Delphi アプリケーションの作成: Delphi は、数多くのデータベース関連のコンポーネントを持っています。また、アプリケーショ ンの作成段階にデータベースに接続する機能を持っているため、それらコンポーネントとデータ ベースのメタデータとを非常に簡単に対応付けられるようになっています。当然、各コンポーネ ントの動作を細かく制御することもできるので、データベースを使う実用的なアプリケーション を作成することが可能です。 ここでは、前章で示したアプリケーションの Delphi による作成手順を詳しく解説しています。 Delphi を使う場合には、SQL Link 、ODBC ドライバのどちらを使っても Linux 上の InterBase に接続できますが、以下は SQL Link を使う場合の例です。また、データベースを使うための BDE の設定方法や、アプリケーションの作成手順については詳しく解説していますが、Delphi の基本的な操作方法や用語の解説はしていないので、それらについては Delphi のマニュアルなど を参照してください。 6.1 必要な製品とインストール時の注意 SQL Link を使って Linux 上の InterBase への接続を行う場合には、Delphi の「 Client/Server Suite 」が必要です。また、以下のアプリケーション作成手順は、Delphi の現時点での最新バー ジョンである 3.1J を使った場合の例です。 Delphi Client/Server Suite をインストールするときには、インストールするコンポーネントを 選択できます。このとき、 「 Borland Database Engine 」と「 SQL Link 」の中の「 InterBase Link 」 は、必ず選択しておいてください。 113 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 7 第7章 Excel アプリケーションの作成: Excel は表計算ソフトであって、アプリケーションのユーザーインターフェイスとして使うに は、少し無理があるのかもしれません。ここで作成するアプリケーションも、前章の Delphi で作 成したものと比べると、あまり実用的なものではありません。 しかし、InterBase のクライアントとして Excel が適していない、というわけでは決してあり ません。たとえば、データベースから表形式でデータを取り出して、それを Excel の機能を使っ て加工することや、そのデータを特定の書式で印刷することなど、さまざまな便利な利用方法が 考えられます。このように、ユーザーインターフェイスとしてのみではなく、データベースから 取り出したデータをその機能を使って加工、印刷する場合などには、Excel は便利なクライアン トツールとなります。 ここでは、第5章で説明したアプリケーションを作成する手順を解説しています。Excel の機 能を使ってデータの加工などを行うことはありませんが、このアプリケーションは、データベー スからのデータの取り出し、データの挿入、更新、削除などのデータベースの基本的な操作をす べて含んでいます。したがって、その作成手順は、別の目的で Excel からデータベースを使うと きにも参考にしていただけると思います。 Excel を使う場合には、ODBC ドライバを使って Linux 上の InterBase に接続します。そして、 この ODBC を使うためのインターフェイスとして、DAO や「 XLODBC.xla」アドインなどが提 供されていますが、以下は「 XLODBC.xla」アドインを使う場合の例です。また、ODBC の設定 方法や、アプリケーションの作成手順については詳しく解説していますが、Excel の基本的な操 作方法や用語の解説はしていないので、それらについては Excel のマニュアルなどを参照してく ださい。 155 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 8 第8章 CGI アプリケーションの作成: 最後に、第5章で説明したアプリケーションを、CGI プログラムで作成する方法を解説します。 CGI プログラムからデータベースを使う場合には、第4章であげたような問題点もあります。し かし、すべてのプログラムがサーバ上あれば、ブラウザを持つすべてのクライアントでそれらを 実行できるという点で、理想的な利用形態です。 また、CGI プログラムは、Web サーバとのデータのやり取りを行う部分が特別なだけであっ て、その他の部分はスタンドアロンのアプリケーションと変わりありません。したがって、ここ であげる例は、Delphi や Excel の例に比べると応用範囲が広いのではないかと思われます。 プログラミング言語としては、C 、C++ 、Perl などを使うこともできますが、ここでは比較的 容易に習得が可能な Python を使う場合の例を紹介します( Python はオブジェクト指向のスクリ プト言語です) 。ただし、Python における InterBase の使用方法、CGI パラメータの取得方法な どについては詳しく解説していますが、その基本的な使用方法、構文、および用語などについて は解説していないので、Python のドキュメントや関連書籍などを参照してください。 8.1 必要な製品とインストール時の注意 InterBase を使用する CGI プログラムの実行には、InterBase と Web サーバが同じマシンに インストールされていなければなりません。Web サーバは、NCSA HTTPd 、Apache などが無 料で入手できます。また、クライアントとして使用するマシンには、Web ブラウザが必要となり ます。 そして、ここでは Python を使ったプログラミングの方法を解説していくので、サーバマシン に Python インタープリタがインストールされていなければなりません(これも無料で入手するこ 179 第8章 アプリケーションの作成:CGI とができます。ただし、Red Hat Linux 、Debian GNU/Linux のディストリビューションには、 パッケージとして含まれています) 。さらに、Python から InterBase を使うためのインターフェ イスモジュール「 Python InterBase module 」もセットアップしておく必要があります。このモ ジュールは、付属の CD-ROM の中に入っています。 これらのインストール方法については、それぞれに付属しているドキュメントなどを参照して ください。 ここで例としてあげるプログラムは、以下の環境で動作確認を行いました。 ● Web サーバ Apache 1.2 ● Python インタープリタ Python 1.4 ● Web ブラウザ Netscape 3.0 Web サーバやブラウザは、このほかの製品や同製品の最新バージョンのものでも問題はないと 思います。また、Python は現時点での最新バージョン 1.5 を使っても問題ありません。 以降の解説は、Python が「 /usr/local 」にインストールされていることを前提として行ってい ます。 8.2 Python InterBase moduleについて 8.2.1 ライブラリを置くディレクトリ 「 Python InterBase module 」の実体は、「 interbasedb.so 」という名前のシェアードライブラリ です。そして、このモジュールを Python のスクリプトで使う場合には、以下のように最初にモ ジュールをインポートしておかなければなりません。 import interbasedb しかし、Python インタープリタが、このモジュールをインポートするためには、 「 interbasedb.so 」 が以下のいずれかのディレクトリに置かれていなければなりません。 ● python インタープリタのモジュールのサーチパスリスト中のいずれかのディレクトリ ● カレントディレクトリ ● 環境変数「 PYTHONPATH」に設定されているディレクトリ ただし、このモジュールをシステムで共通に使用することや、CGI プログラムから使用すること を考慮して、最初にあげたデフォルトのサーチパスリスト中のディレクトリに「 interbasedb.so 」 を移動させておくことをお勧めします。サーチパスリストは、python インタープリタを起動し て、以下のように入力すると表示されます。 180 8.2 Python InterBase module について % python Python 1.4 (Jul 16 1997) [GCC 2.7.2] Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>> import sys >>> print sys.path [’’, ’/usr/local/lib/python1.4’, ’/usr/local/lib/python1.4/test’, ’/usr/local/lib/python1.4/linux2’, ’/usr/local/lib/python1.4/sharedmodules’, ’/usr/local/lib/python1.4/tkinter’] >>> また、スクリプトの中で、このサーチパスリストにパスを追加することもできます( 以下にあ げる例では、この方法を使用しています) 。 import sys sys.path.insert(0, ’/home/IBsample/dbmodule’) 8.2.2 基本的な使用方法 CGI スクリプトを作成する前に、 「 Python InterBase module 」 (以降は、interbasedb モジュー ルと呼びます)の使用方法について簡単に解説しておきます。 ■ 定義されているオブジェクト interbasedb モジュールには、以下の4つのオブジェクトが定義されています。 ● Connection オブジェクト 接続したデータベースの情報、トランザクションの情報を管理するオブジェクトで、コンス トラクタ Connection() により作成されます。 ● Cursor オブジェクト 接続中のデータベースに対するデータ操作を行うためのオブジェクトで、Connection オブ ジェクトのメソッド cursor() により作成されます。 ● Blob オブジェクト データベースの BLOb フィールドへのデータの入出力を行うためのオブジェクトで、フィー ルド属性とそのデータを保持します。Connection オブジェクトのメソッド blob() により作成 されます。 ● Date オブジェクト データベースの DATE 型フィールドへのデータの入出力を行うためのオブジェクトで、日 付と時刻( 年・月・日・時・分・秒)の情報を保持します。コンストラクタ Date() により作成さ れます。 181 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 9 第9章 さらに使い込むために 第 6 章から第 8 章では、クライアントツールなどを使った、簡単なアプリケーションの作成方 法を紹介しました。しかし、もっと実用的なアプリケーションを独自に作ってみたい、と考えら れている方が多いのではないかと思います。 この章の前半では、さまざまなアプリケーションを作成するときに、テーブルの定義や簡単な トリガー、ストアードプロシージャを使うことにより、アプリケーション側での処理がたいへん 簡単になるような例を集めてみました。 また後半では、C 言語のプログラムから InterBase を使用する方法を簡単に解説しています。 C 言語によるプログラミングの経験がある方にとっては、これが最も簡単なアプリケーションの 作成方法かもしれません。 9.1 データベース定義により可能な処理 ネットワークを介してデータベースを使用するようなアプリケーションを作成する場合、クラ イアント側につい多くの処理を記述してしまいがちです。このことは、クライアント上で使用し ている開発ツールが使い慣れたものであるような場合には、より顕著になる傾向があります。 しかし、同じデータベースを使用するクライアントアプリケーションを、異なるツールを使っ て作成する場合を考えてみてください。なるべく多くの処理がデータベースに定義されていたほ うが、明らかにクライアント側で行う処理は減り、アプリケーション開発は容易になります。ま た、処理の変更や拡張などを行う場合も、データベースに定義されている処理を変更するだけで 良く、クライアントアプリケーションを変更する必要はありません。 209 第9章 さらに使い込むために さらに、データベースに一連の処理を定義しておくことは、アプリケーション実行時のクライ アントとサーバ間のデータのやり取りを最小限に抑えることにつながります。 以下は、アプリケーション側で行わなくても、テーブルの定義、簡単なトリガー、ストアード プロシージャによって行うことのできる処理の例をあげたものです( これまでの解説の内容と重 複しているものもあります) 。 9.1.1 ユニークキーの生成 テーブルにレコードを挿入するときに、ユニークキーを生成して、特定のフィールドに自動設 定することができます。これを行うためには、トリガーとジェネレータを使います。 たとえば、2つのフィールドを持つ以下のようなテーブルを定義しているとします。 CREATE TABLE table1 ( field1 INTEGER, field2 VARCHAR(10) ) ; このテーブルの field1 にユニークキーを自動設定する場合には、以下のようなジェネレータとト リガーを定義します。 CREATE GENERATOR gen_unique_key ; SET TERM ^ ; CREATE TRIGGER set_unique_key FOR table1 BEFORE INSERT AS BEGIN NEW.field1 = GEN_ID( gen_unique_key, 1 ) ; END ^ SET TERM ; ^ field2 に値を指定してレコードを挿入すると、field1 にはユニークキーが自動設定されます。 SQL> SQL> SQL> SQL> INSERT INSERT INSERT SELECT INTO table1 ( INTO table1 ( INTO table1 ( * FROM table1 FIELD1 FIELD2 =========== ========== 1 test1 2 test2 3 test3 210 field2 ) VALUES ( ’test1’ ) ; field2 ) VALUES ( ’test2’ ) ; field2 ) VALUES ( ’test3’ ) ; ; 9.1 データベース定義により可能な処理 9.1.2 生成したユニークキーの取得 前項では、トリガーとジェネレータを使ってユニークキーの自動生成を行う方法を、例としてあ げました。しかし、この方法では自動生成されたキーの値は、レコードを挿入した後、SELECT 文を実行しなければ取得することができません。 自動生成したユニークキーをアプリケーションで取得する必要がある場合には、ストアードプ ロシージャ内でジェネレータを使います。 たとえば、2つのフィールドを持つ以下のようなテーブルを定義しているとします。 CREATE TABLE table1 ( field1 INTEGER, field2 VARCHAR(10) ) ; field1 にユニークキーを設定してレコードを挿入した後、そのキーの値を取得する場合には、以 下のようなジェネレータとストアードプロシージャを定義します。 CREATE GENERATOR gen_unique_key ; SET TERM ^ ; CREATE PROCEDURE insert_table1( i_field2 VARCHAR(10) ) RETURNS ( o_field1 INTEGER ) AS BEGIN o_field1 = GEN_ID( gen_unique_key, 1 ) ; INSERT INTO table1 VALUES ( :o_field1, :i_field2 ) ; SUSPEND ; END ^ SET TERM ; ^ レコードの挿入は直接 INSERT 文を使用せず、このストアードプロシージャを実行させて行い ます。 SQL> SELECT * FROM insert_table1( ’test1’ ) ; O_FIELD1 =========== 1 SQL> SELECT * FROM insert_table1( ’test2’ ) ; O_FIELD1 =========== 2 211 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Chapter 10 第10章 トラブルシューティング 日本で InterBase が販売されるようになってから、約 5 年が経過しました。その間、InterBase を使用したアプリケーション開発に携わった方々から、多くの疑問点などが寄せられて来ました。 それらは、Solaris 、HP/UX 版など、Linux 版以外の InterBase を使われている方々からのもの ですが、プラットフォームに依存しない内容のものが大部分を占めています。この章では、それ らの中で最も頻度の高かったものを、Q&A 形式でまとめました。 10.1 文字列フィールドの結合 Q SQL の SELECT 文で、複数のフィールドの文字列を結合させて、1つの文字列として取り出 すことはできないのか? A 文字列の連結演算子||を使って、複数の文字列を1つに結合して取り出すことができます。 たとえば、isql を起動して、第3章で使用した社員情報データベースに接続し、以下のような SQL 文を入力してみてください。 SQL> SELECT dep_code || emp_code, emp_name FROM employees ; 3 桁の部署コード「 dep_code 」と 4 桁の社員番号「 emp_code 」が結合され、以下のような 7 桁の コードとして取り出されます。 243 第 10 章 トラブルシューティング EMP_NAME ======= ==================== 1100021 3100030 2200042 1200048 2100051 渡 上 川 田 小 辺 田 崎 中 林 一 浩 徹 秀 利 郎 二 男 行 : また、フィールド値とフィールド値の結合だけでなく、指定文字列とフィールド値の結合を行 うこともできます。 SQL> SELECT ’ 氏 名:’ || emp_name, ’ 社 員 番 号:’ || emp_code FROM employees ; ========================== ============== 氏 氏 氏 氏 氏 名 名 名 名 名 :渡 :上 :川 :田 :小 辺 田 崎 中 林 一 浩 徹 秀 利 郎 二 社 社 社 社 社 男 行 員 員 員 員 員 番 番 番 番 番 号 号 号 号 号 :0021 :0030 :0042 :0048 :0051 : 10.2 現在値に対する相対的な更新 Q 複数レコードのあるフィールドを、それぞれの現在値を元に算出した新しい値に、一括して更 新することはできないのか? A UPDATE 文の SET 句の“ = ”の後にフィールド名を記述すると、フィールドの現在値を参照 することができます。また、数値の算術演算子や文字列の連結演算子も、その部分に記述できま す。これらを使えば、現在値を元に算出した値に、フィールドの値を更新できます。 たとえば、isql を起動して、第3章で使用した社員情報データベースに接続し、以下のような SQL 文を入力して現在のフィールド値を確認してください。 244 10.3 SELECT 文による挿入・更新値の取得 SQL> SELECT * FROM employees WHERE dep_code = ’210’ ; DEP_CODE SALARY AGE SEX PHONE_NO EMP_CODE EMP_NAME ======== ==================== ======== =========== ====== ====== ======== 0051 0060 0088 0247 0259 小 木 山 吉 渡 林 村 崎 田 辺 利 広 辰 弘 一 行 志 男 美 郎 210 210 210 210 210 428000 396000 361000 257000 252000 41 38 35 25 24 M M M F M 2321 2322 2312 2326 2324 これらの社員の月給「 salary 」を、現在の値に 5 千円加算したものに変更する場合には、以下のよ うな UPDATE 文を入力します。 SQL> UPDATE employees SET salary = salary + 5000 WHERE dep_code = ’210’ ; SQL> 変更された値を確認してください。 SQL> SELECT * FROM employees WHERE dep_code = ’210’ ; DEP_CODE SALARY AGE SEX PHONE_NO EMP_CODE EMP_NAME ======== ==================== ======== =========== ====== ====== ======== 0051 0060 0088 0247 0259 小 木 山 吉 渡 林 村 崎 田 辺 利 広 辰 弘 一 行 志 男 美 郎 210 210 210 210 210 433000 401000 366000 262000 257000 41 38 35 25 24 M M M F M 2321 2322 2312 2326 2324 10.3 SELECT文による挿入・更新値の取得 Q INSERT 文でレコードの挿入を行うときに、VALUES 句で指定するフィールド値として、別 のテーブルから SELECT 文で取り出した値を使いたい。これを1つの SQL 文で記述することは できないのか? A INSERT 文の VALUES 句の中や UPDATE 文の SET 句の“ = ”の後に、単一のフィールドの 値を返す SELECT 文を記述できます。 245 ,,, ,,, ,,, ,,, ,,, ,, ,,, ,,,,, ,,, ,,,,, ,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,,,, ,,, ,,, ,,, ,, ,,, ,, ,, ,,, ,, ,, ,,,, ,,, ,,, ,, ,,,,,,,,, ,,,, ,,, ,,, ,,,, ,,,,,,,,, ,,,, ,,,,,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,,,,,, ,,,,, ,,,,, ,,,,,,,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, InterBase 4.0 for Linux Appendix Appendix リファレンス この章では、InterBase のコマンドラインツールのオプションや、isql やプログラムで使用す る SQL 文、またプロシージャ/トリガー言語の構文を解説しています。InterBase のマニュアル から抜粋したものなので、本書では解説していない内容のものも含まれています。 A.1 コマンドリファレンス gbak データベースのバックアップ/リストアを行うためのユーティリティです。リストアを行うと きに、ページサイズの変更やインデックスの無効化などを行うこともできます。 構文 バ ックア ップを行う場合 gbak [-b] [ オ プ シ ョ ン ] デ ー タ ベ ー ス 名 { バ ッ ク ア ッ プ フ ァ イ ル 名 | デ バ イ ス 名 } リストアを行う場合 gbak {-c|-r} [ オ プ シ ョ ン ] { バ ッ ク ア ッ プ フ ァ イ ル 名 | デ バ イ ス 名 } デ ー タ ベ ー ス 名 複数ファイルデータベースとしてリストアを行う場合 gbak {-c|-r} [ オ プ シ ョ ン ] { バ ッ ク ア ッ プ フ ァ イ ル 名 | デ バ イ ス 名 } 一 次 フ ァ イ ル 名 一 次 フ ァ イ ル の ペ ー ジ サ イ ズ 二 次 フ ァ イ ル 名 [ 二 次 フ ァ イ ル の ペ ー ジ サ イ ズ ...] 259 Appendix A リファレンス オプション 表 A-1 バックアップを行う場合のオプション オプション 説明 -b[ackup_database] データベースを、ファイルまたはテープデバイスなどにバックアップします。た だし、-b 、-c 、-r のいずれも指定せずに起動した場合にも、-b を指定した場合 と同じ動作になります。 -e[xpand] データを圧縮せずバックアップを行います。 -fa[ctor] n テープデバイスにバックアップするときのブロック化係数を n にします。 -g[arbage_collect] バックアップ中に、ガベージコレクションを行いません。このオプションを指定 しない場合は、ガベージコレクションを行います。 -ig[nore] バックアップ中のチェックサムエラーを無視します。 -l[imbo] バックアップ中に、limbo 状態 ( 自動2相コミットの途中で、コミットされるか ロールバックされるかわからない状態) のトランザクションを無視します。 -m[eta_data] メタデータのみをバックアップします。 -ol[d_descriptions] 古いフォーマットのメタデータをバックアップします。 -pas[sword] password -user とともに指定された場合に、ユーザー名とパスワードをチェックしてから、 バックアップを行います。 -t[ransportable] 異なるプラットフォーム上でも、リストアが可能なフォーマットのバックアップ ファイルを作成します。ただし、バージョン 4.0 からは、デフォルトでこのフォー マットのバックアップを作成するようになっています。 -user username -password とともに指定された場合に、ユーザー名とパスワードをチェックして から、バックアップを行います。 -v[erify] バックアップ中の処理の内容を標準エラーに出力します。 -y {filename|s[uppress]} 標準エラーへの出力を、指定ファイルに書き込みます。ただし、s[uppress] を指 定すると、出力を抑止します。 -z gbak と InterBase エンジンのバージョン情報を標準エラーに出力します。 複数ファイルデータベースとしてリストアを行う場合は、データベースの一次ファイル名の後 に、一次ファイルに格納するデータのサイズを、ページ単位( 最小値は 200 )で指定します。その 後に、データベースの二次ファイル名を指定します。さらに複数の二次ファイルを作成する場合 には、その前の第1二次ファイルのページ数を指定して、第2二次ファイル名を指定します。二 次ファイルの数だけ、これを繰り返します。 260 A.1 コマンドリファレンス 表 A-2 リストアを行う場合のオプション オプション 説明 -c[reate_database] ファイルまたはテープデバイスなどから、データベースをリストアし、新しいデー タベースファイルを作成します。 -i[nactive] インデックスを無効にしてリストアを行います。 -k[ill] 定義されているシャドウをリストアしません。 -n[o_validity] ドメインに付けられた CHECK 制約をリストアしません。 -o[ne_at_a_time] テーブルごとに、そのメタデータとテーブルのデータをリストアします。指定が ないときは、すべてのメタデータが最初にリストアした後、その他のデータをリ ストアします。 -p[age_size] n リストアするデータベースのページサイズを n にします。ただし、ページサイズ は、1024 、2048 、4096 、8192 のいずれかを指定します。デフォルトは 1024 です。 -pas[sword] password -user とともに指定された場合に、ユーザー名とパスワードをチェックしてから、 リストアを行います。 -r[eplace_database] ファイルまたはテープデバイスなどから、データベースをリストアします。ただ し、リストアしようとするデータベースと同じ名前のデータベースがすでにある 場合は置き換え、ない場合は作成します。 -user username -password とともに指定された場合に、ユーザー名とパスワードをチェックして から、リストアを行います。 -v[erify] リストア中の処理の内容を標準エラーに出力します。 -y {filename|s[uppress]} 標準エラーへの出力を、指定ファイルに書き込みます。ただし、s[uppress] を指 定すると、出力を抑止します。 -z gbak と InterBase エンジンのバージョン情報を標準エラーに出力します。 たとえば、バックアップファイル 「 company.gbk」 を、500 ページ分のデータを格納する 「 company1. gdb 」、400 ページ分のデータを格納する「 company2.gdb」、残りのデータを格納する「 company3. gdb 」の3つのファイルのデータベースとしてリストアする場合には、以下のように入力します。 % gbak -c company.gbk company1.gdb 500 company2.gdb 400 company3.gdb 261 Appendix A リファレンス A.2 SQL言語リファレンス A.2.1 SQL文と関数リファレンス 以下は、InterBase で使用可能な SQL 文、および集合関数、変換関数の構文と使い方の説明 です。 各 SQL 文、関数のタイトルの後には、それぞれが埋め込み型 SQL( SQL )、ダイナミック SQL ( DSQL )、コマンドラインツール isql( isql )で使用可能かどうかを記述しています。また、構文 の最後がセミコロン( ; )で終わっている SQL 文をダイナミック SQL で使用する場合は、セミコ ロンを省略してもかまいません。 メタデータの変更、削除を行う ALTER 文、DROP 文を実行させることができるのは、そのメ タデータの作成者、SYSDBA ユーザー、およびオペレーティングシステムの root 特権を持って いるユーザーのみです。 ALTER DATABASE 現在のデータベースに二次ファイルを追加します。SQL 、DSQL 、isql で使用できます。 構文 ALTER {DATABASE | SCHEMA} ADD <add_clause> [ADD <add_clause> ...]; <add_clause> = FILE "<filespec>" [<fileinfo>] [<add_cluase>] <fileinfo> = {LENGTH [=] int [PAGE[S]] | STARTING [AT [PAGE]] int} [<fileinfo>] 引数 説明 SCHEMA DATABASE の代わりに使用できるキーワード ADD FILE "<filespec>" 一次ファイルの容量が限界になったときに、データベースページを引き継ぐ 二次ファイルを追加します。リモートデータベースの場合は、同一ノードの 二次ファイルを指定してください。 LENGTH [=] int [PAGE[S]] 二次ファイルのページ範囲を、ファイル当たりのページ数で指定します。 STARTING [AT [PAGE]] int 二次ファイルのページ範囲を、開始ページ番号で指定します。 説明 ALTER DATABASE は、既存のデータベースに二次ファイルを追加します。二次ファイルは、 データベースの拡張や格納場所の制御に使用します。データベースファイルは、複数のデバイス に分散させることができますが、一次データベースファイルと同じノードでなければなりません。 268 A.2 SQL 言語リファレンス ALTER DATABASE を実行するには、データベースに対し排他アクセスすることが必要にな ります。 例 次の isql 文で、既存のデータベースに二次ファイルを追加します。 ALTER DATABASE ADD FILE "employee.gd1" STARTING AT PAGE 10001 LENGTH 10000 ADD FILE "employee.gd2" LENGTH 10000; 関連項目 CREATE DATABASE、DROP DATABASE ALTER DOMAIN ドメインの定義を変更します。SQL 、DSQL 、isql で使用できます。 構文 ALTER DOMAIN name { [SET DEFAULT {literal | NULL | USER}] | [DROP DEFAULT] | [ADD [CONSTRAINT] CHECK (<dom_search_condition>)] | [DROP CONSTRAINT] }; <dom_search_condition> = { VALUE <operator> <val> | VALUE [NOT] BETWEEN <val> AND <val> | VALUE [NOT] LIKE <val> [ESCAPE <val>] | VALUE [NOT] IN (<val> [, <val> ...]) | VALUE IS [NOT] NULL | VALUE [NOT] CONTAINING <val> | VALUE [NOT] STARTING [WITH] <val> | (<dom_search_condition>) | NOT <dom_search_condition> | <dom_search_condition> OR <dom_search_condition> | <dom_search_condition> AND <dom_search_condition> } <operator> = {= | < | > | <= | >= | !< | !> | <> | !=} 269 Appendix A リファレンス 引数 説明 name 既存のドメイン名 SET DEFAULT フィールドの値が入力されなかった場合に使用するデフォルト値を指定し ます。許容値は、次のとおりです。 ● literal:指定した文字列、数値、日付のいずれかを挿入します。 ● NULL:NULL 値を入力します。 ● USER:現在のユーザー名を入力します。対象となるフィールドは、ユー ザー名を格納できるテキスト型でなければなりません。 フィールドレベルで設定したデフォルトは、ドメインレベルで設定したデ フォルトに優先します。 DROP DEFAULT 既存のデフォルトを削除します。 ADD [CONSTRAINT] CHECK <dom_search_condition> ドメインの定義に、CHECK 制約を追加します。ドメインの定義に使用で きる CHECK 制約は、1つだけです。 DROP CONSTRAINT ドメインの定義から、CHECK 制約を削除します。 説明 データタイプと NOT NULL 設定を除く、既存のドメインの特性を変更することができます。 ドメインの定義を変更すると、テーブルレベルで設定した優先項目を除く、ドメインを基本とし たすべてのフィールド定義が影響を受けます。 データタイプや NOT NULL 設定を変更するには、ドメインを削除してから再作成してください。 例 次の isql 文は、1000 より大きい値の入力のみを許可するドメインを作成し、そのデフォルト値 を 9999 に変更します。 CREATE DOMAIN CUSTNO AS INTEGER CHECK (VALUE > 1000); ALTER DOMAIN CUSNO SET DEFAULT 9999; 関連項目 CREATE DOMAIN、CREATE TABLE 、DROP DOMAIN 270