FrontPage


Firebird SQL リファレンス:CONNECT系,SET SQL DIALECT系



CONNECT

 データベースに接続します。SQLで使用可能です。また、isqlではCONNECTの サブセットが使用できます。
 接続のキャラクタセットは、CONNECT の前に SET NAMES で設定したものとなり ます。日本語を取り扱う場合には、事前に設定を行う必要があるかもしれません。 特に、データベース内でキャラクタセットを明示している場合には必須です。
 この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの 各リリースノートにおける追加内容に関して反映・統合されています。

構文

isql(サブセット)形式:

CONNECT 'filespec' [USER 'username'][PASSWORD 'password']
   [CACHE int] [ROLE 'rolename']


SQL形式:

CONNECT [TO] {ALL | DEFAULT} <config_opts>
    | <db_specs> <config_opts> [, <db_specs> <config_opts>...];


<db_specs> = dbhandle | {'filespec' | :variable} AS dbhandle
<config_opts> = [USER {'username' | :variable}]
    [PASSWORD {'password' | :variable}]
    [ROLE {'rolename' | :variable}]
    [CACHE int [BUFFERS]]



引数説明
{ALL|DEFAULT}SET DATABASEで指定したすべてのデータベースに接続します。CONNECT TO ALL と指定した場合は、すべてのデータベースに対して影響を与えます。
'filespec'データベースのファイル名です。パスやノードの指定を含むことが出来ます。空白文字を含む場合には、シングルクォーテーションで囲む必要があります。
(FB1.5以降では、データベースのaliases.confで定義したエイリアスを使用することも出来ます。)
dbhandle事前に SET DATABASE で宣言したデータベースハンドルです。埋め込みSQLで使用可能ですが、isqlでは使用できません。
:variableホスト言語の変数で、データベース名やユーザー名パスワード等の指定を行います。埋め込みSQLで使用可能ですが isql では使用できません。
AS dbhandle宣言されたデータベースハンドルにデータベースの接続を割当てます。埋め込みSQLで使用可能ですが isql では使用できません。
USER {'username'|:variable}文字列もしくはホスト変数で指定されたユーザー名でデータベースに接続します。サーバは、ユーザー名をセキュリティデータベースと照合します。
PASSWORD {'password'|:variable}データベース接続のためのパスワードを、文字列もしくはホスト変数により最大8文字で指定します。サーバは、ユーザー名とパスワードをセキュリティデータベースと照合します。
ROLE {'rolename'|:variable}データベース接続のためのロール名を、文字列もしくはホスト変数により最大32文字で指定します。ユーザーは、ロール特権を得るためには事前にロールのメンバーシップを与えられなければなりません。ROLE節が指定されれば、そのメンバーシップに関係なく接続時にはその特権が与えられます。1回の接続では1つのロールしか使用できません。変更するには再接続を行う必要があります。
CACHE int [BUFFERS]データベース接続のキャッシュバッファサイズを設定します。指定は現在のページサイズ単位となり、整数で指定します。
デフォルト値は256です。
最大サイズはシステムに依存します。
※filespecでのキャッシュサイズ指定は使用しないで下さい。

詳細の説明


  • データベースデータストラクチャを初期化します。


  • データベース本体があるノード(ローカルデータベース)もしくは、 別のノード(リモートデータベース)を指定します。データベースエンジンがアクセス できない場所が指定された場合には、エラーが発生します。


  • データベース接続のためのユーザー名、パスワード、ロールなどのうち、必要な ものを選択して指定します。PCクライアントは、常に正しいユーザー名とパスワード を送信しなければなりません。データベースエンジンは、パスワードの最初の8文字 のみを認識します。

     ユーザーが環境変数の ISC_USER と ISC_PASSWORD を設定し、さらにそこで設定 されたユーザーが security.fdb または isc4.gdb に存在しない場合は、ローカル サーバマネージャーから、次のようなエラーを受取るはずです。
     "undefined user name and password.”(未定義のユーザーとパスワードです。)
     サーバマネージャによって行われる自動接続は、ユーザーのセキュリティ操作を バイパスします。


  • データベースへの接続時には次のことが行われます。
    1. ヘッダページ部分のベリファイ
    2. 既存データベースの存在チェック
    3. バージョンチェック。オンディスクストラクチャ(ODS)にはデータベースの バージョン番号があるので、データベースエンジンが扱えるバージョンである かチェックします
     異常があった場合、データベースエンジンはエラーを返します。


  • 必要な場合は、SET DATABASE を使用してデータベースハンドルを設定しておきます。


  • データベース接続のために、指定したキャッシュバッファが確保されます。


  • (埋め込みSQLなどで)SQLを使用するプログラムでは、CONNECT でデータベースに 接続する前に SET DATABASE を行う必要があります。isql では、SET DATABASE は 使用しません。


  • (埋め込みSQLなどで)SQLを使用するプログラムでは、CONNECT 文で複数の データベース接続を行えますが、接続ごとの文を用意することにより、プログラムの 可読性が向上します。


  • CONNECTでデータベースに接続するとき、デフォルトのキャラクタセットは(NONE) となります。キャラクタセットを指定して接続したい場合は、事前に、SET NAMES 文 を使用して設定します。


  • (埋め込みSQLなどで)SQLを使用するプログラムではデフォルトのキャッシュサイズ は75ですが、CACHEオプションによりシステムで最大限利用可能なサイズまでの量が 確保できます。このオプションは以下のように使用できます。
    • CONNECT文で示された全データベース接続リストの中で、指定サイズのキャッシュを 持っていないものに新しいデフォルトサイズを設定します。
    • 1つのデータベース接続を使用するプログラムのキャッシュサイズを設定します。
    • デフォルト値は変更せずに、1つのデータベース接続のキャッシュサイズのみを 変更します。

 接続が維持されている限り、そのキャッシュサイズは変更されません。 データベース接続がマルチクライアント・サーバ接続で行われている場合、すべて の接続が終了するまでキャッシュサイズの増加は行われません。キャッシュサイズ の減少は、すべてのデータベース接続が終了するまで行われません。


  • isqlでは、データベースファイル名、ユーザー名、パスワードを指定する CONNECT のサブセットが使用できます。また、isqlでは同時に複数のデータベースに接続する ことは出来ません。新しいCONNECT文を使用すると、それまでの接続は自動的に切断 されます。

用例

  • isqlで、データベースを開く例です。
CONNECT 'employee.fdb' USER 'ACCT_REC' PASSWORD 'peanuts';
  • isqlで、キャラクタセットをシフトJISに設定してデータベースを開く例です。 日本語を正しく扱うには、事前にキャラクタセットを設定した方が良いです。
SET NAMES SJIS_0208;
CONNECT 'employee.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
  • 埋め込みSQLでの使用例です。データベースハンドルを使用し、パラメータはホスト 変数で与えています。
EXEC SQL
SET DATABASE DB1 = 'employee.fdb';

EXEC SQL
CONNECT :db_file AS DB1;
  • 埋め込みSQLでの使用例です。accounts.fdb への接続でキャッシュバッファサイズ を150に設定しています。
EXEC SQL
CONNECT 'accounts.fdb' CACHE 150;
  • 埋め込みSQLでの使用例です。事前に SET DATABASE で指定したすべてのデータベース に対し、指定したユーザー名で接続します。
EXEC SQL
CONNECT ALL USER 'ACCT_REC' PASSWORD 'peanuts'
CACHE 50;
  • 埋め込みSQLでの使用例です。キャッシュサイズを、employee.fdb は 80、 employee2.fdbはデフォルトの 75 にします。
EXEC SQL
CONNECT 'employee.fdb' CACHE 80, 'employee2.fdb';
  • 埋め込みSQLでの使用例です。接続するすべてのデータベースのキャッシュサイズ を 50 にします。
EXEC SQL
CONNECT ALL CACHE 50;
  • 埋め込みSQLでの使用例です。キャッサイズを各々 80 にします。
EXEC SQL
CONNECT EMP1 CACHE 80, EMP2 CACHE 80;
  • 埋め込みSQLでの使用例です。ホスト変数で指定した2つのデータベースに対し、 別々のユーザーとして接続しています。
EXEC SQL
CONNECT
  :orderdb AS DB1 USER 'ACCT_REC' PASSWORD 'peanuts',
  :salesdb AS DB2 USER 'ACCT_PAY' PASSWORD 'payout';

参照

DISCONNECT , SET DATABASE , SET NAMES

 キャッシュバッファに関するより詳細は Data Definition Guide の cache buffers を、データベースセキュリティとisqlに関するより詳細は、Operations Guide を参照 して下さい。






DISCONNECT

 データベースとの接続を切断します。SQLで使用できます。 isqlでは使用できません。

構文

DISCONNECT {
    {ALL | DEFAULT} | dbhandle [, dbhandle] …]
} ;



引数説明
ALL|DEFAULTどちらを指定しても、すべてのデータベース接続を切断します。
dbhandle事前に宣言したデータベースハンドルを指定して、切断する接続を指定します。

詳細の説明

 DISCONNECTは、すべてまたはデータベースハンドルで指定したデータベース接続を 切断し、その接続で使用されたリソースを解放します。gpre で -manual オプション が指定されていないかぎり、デフォルトのトランザクションをコミットします。 デフォルト以外のトランザクションはコミットを行わず、エラーを返します。

 DISCONNECTによる切断を行う前に、接続中であるデータベースのトランザクション に対し、コミットまたはロールバックを行ってください。

 DISCONNECTによって切断されたデータベースに再接続するには、再度 CONNECT を 行う必要があります。

用例

すべて、埋め込みSQLの例です。

  • すべてのデータベース接続を切断します。
EXEC SQL
DISCONNECT DEFAULT;
EXEC SQL
DISCONNECT ALL;
  • 指定したデータベースハンドルの接続を切断します。
EXEC SQL
DISCONNECT DB1;
EXEC SQL
DISCONNECT DB1, DB2;

参照

 COMMIT , CONNECT , ROLLBACK , SET DATABASE






SET DATABASE

 データベースへアクセスするためのデータベースハンドルを宣言します。 SQL で使用できます。
 Firebirdでは、スキーマ機能は実装されていませんので、DATABASE を SCHEMA としても機能としては同じとなります。

構文

SET {DATABASE | SCHEMA} dbhandle =
    [GLOBAL | STATIC | EXTERN][COMPILETIME][FILENAME] 'dbname'
    [USER 'name' PASSWORD 'string']
    [RUNTIME [FILENAME]
        {'dbname' | :var}
        [USER {'name' | :var} PASSWORD {'string' |:var}]
    ];



引数説明
dbhandleデータベースハンドル。データベース指定に対するエイリアス
・プログラム中で一意である必要があります。
・以降のSQL文でデータベースハンドルが使用できるようになります。
GLOBALデフォルトです。作成した宣言は、すべてのモジュールで有効になります。
STATIC宣言は、現在のモジュールでのみ有効になります。
EXTERN別のモジュールで宣言したものを参照して、新しいデータベースハンドルを宣言します。
COMPILETIME列参照のプリプロセッサ処理中に、使用するデータベースを認識します。
・1つのデータベースが指定されていれば、その認識は動作時とコンパイル時の両方で行われます。
'dbname'データベースハンドルに割当てる、データベースファイルの設置場所とパス名です。指定方法はプラットフォームに依存します。
RUNTIMEプリプロセッサ処理のために指定したデータベースと、実行時に使用するデータベースの指定が異なる場合に使用します。
:varホスト言語変数により、データベースの指定やユーザー名、パスワードを与えます。
USER 'name'接続するデータベースサーバが正当に認識するユーザー名です。
・データベースサーバに接続するためには、PASSWORD の指定が同時に必要です。
・PCクライアント接続のために要求されます。(他の接続の場合は、オプションです。)
PASSWORD 'string'接続するデータベースサーバが正当に認識するパスワードです。
・データベースサーバに接続するためには、USER の指定が同時に必要です。
・PCクライアント接続のために要求されます。(他の接続の場合は、オプションです。)


詳細の説明

 SET DATABASE は、データベースハンドルの宣言を行い、データベースの指定と 関連付けを行います。オプション指定により、コンパイル時と実行時で別の データベースを指定することが出来ます。複数のデータベースへの接続を行う (埋め込みSQL等を使用した)アプリケーションは、各データベースを識別する データベースハンドルを宣言するために、SET DATABASE を必ず使用する必要が あります。

 「dbhandle」は、アプリケーションで定義するデータベースハンドルです。 通常、データベースハンドルの名前は、実際のデータベースの名前を省略した ものを使用します。ここで宣言したデータベースハンドルは、以降の CONNECT, COMMIT, ROLLBACk で使用出来ます。それは、トランザクション中で2つ以上 の異なるデータベースに同じ名前のテーブルを含んでいる場合に、テーブル の区別を行うために使用出来ます。

 「dbname」は、データベースハンドルが実際のデータベースと接続するために 必要なファイルの指定を行うもので、内容はプラットフォームに依存します。 これは、データベースサーバが認識するファイル指定方法で記述される必要が あります。

 GLOBAL, STATIC, EXTERN は、データベース宣言のスコープを指定するオプション です。デフォルトである GLOBAL は、データベースハンドルがアプリケーションの コードの全域で使用可能とすることを宣言します。STATIC は、ハンドルの宣言を 行ったモジュールでのみ使用可能とします。EXTERN は、データベースハンドルの 宣言が、別モジュールで GLOBAL と宣言されているものを参照するということを 示します。

 オプション、COMPILETIME と RUNTIME を使用することにより、1つのデータベース ハンドルで、コンパイル時と実行時で別のデータベースを使用するように設定する ことが出来ます。省略時、または COMPILETIME のみの指定を行った場合には、 データベースエンジンはプリプロセッサ処理時と実行時で同一のデータベースを使用 します。

 USER および PASSWORD パラメータの指定は、PCクライアントアプリケーション では必須です。しかし、他のリモート接続においてはオプションの場合もあります。 ユーザー名およびパスワードのセキュリティデータベースとの照合は、接続を行う 遠隔サーバによって行われます。

用例

 例は、すべて埋め込みSQLプログラムの場合です。

  • データベースハンドルの宣言を行います。
EXEC SQL
SET DATABASE DB1 = 'employee.fdb';


  • コンパイル時と実行時で、別のデータベースを使用できるようにした例です。 実行時にはホスト言語変数によって指定を行います。
EXEC SQL
SET DATABASE EMDBP = 'employee.fdb' RUNTIME :db_name;

参照

 COMMIT , CONNECT , ROLLBACK , SELECT

 さらに詳細が知りたい場合は、Operations Guide の security database を 参照して下さい。






SET NAMES

 以降の接続で有効になるキャラクタセットを設定します。 SQL および isql で使用できます。

構文

SET NAMES [charset | :var];


※ DSQLで使用する場合、終端文字のセミコロンは不要です。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。

引数説明
charsetプロセスで使用する有効なキャラクタセットの名前です。デフォルトはNONEです。
:varキャラクタセット名をホスト言語変数で指定します。
・事前に宣言されたキャラクタセット名であることが必要です。
・SQLでのみ有効です。

詳細の説明

 SET NAMES は、以降のデータベース接続で用いられるキャラクタセットを指定 します。これを設定することにより、サーバで設定されたキャラクタセットと クライアントアプリケーションの間で、文字コードの変換処理を行うことが可能 となります。

 SET NAMES は、それが影響を及ぼす CONNECT 文よりも前に実行される必要が あります。

 組込みアプリケーションでは、SET NAMES のキャラクタセット指定をホスト変数 で行うことにより、対話的な設定も出来ます。


 キャラクタセットの指定は、指定可能な(ソート順序に影響を与える)コレーション オーダーのサブセットを限定します。キャラクタセットとコレーションオーダーの 指定を行うと、SELECT,INSERT,UPDATEを行うときの列データに影響を与えます。

重要
 デフォルトキャラクタセットを指定しない限り、デフォルトを NONE と指定した 場合と同じになります。キャラクタセットに NONE を指定するということは、 列には「特定のキャラクタセットがない」と仮定されたことになります。その場合、 格納や取り出すときにはオリジナルのデータがそのまま使用されます。 NONE を指定 した列には、どのようなキャラクタセットのデータもロードできます。 しかし、そのデータを NONE 以外のキャラクタセットを指定した列にロードすること は出来ません。それは、ソースからディストネーションに転送するときの文字変換が 行われないためです。したがって、大抵の場合はエラーを発生させます。



用例

  • 埋め込みSQLを使用したプログラムで SET NAMES を使用する例です。
EXEC SQL
SET NAMES ISO8859_1;

EXEC SQL
SET DATABASE DB1 = 'employee.fdb';

EXEC SQL
CONNECT;
  • isqlで SET NAMES を使用する例です。
SET NAMES EUCJ_0208;
CONNECT 'employee.fdb' USER 'SYSDBA' PASSWORD 'masterkey';

参照

 CONNECT , SET DATABASE

 より詳細が知りたい場合は、キャラクタセット・データ型・権限や Data Definition Guide を参照して下さい。






SET SQL DIALECT

 データベースアクセス時の SQL Dialect 値を宣言します。 gpre, isql, wisql, SQL で使用可能です。

構文

 SET SQL DIALECT n;



引数説明
nSQL Dialect を指定します。以下の指定が可能です。
1 : InterBase5.5 以前
2 : 1から3へ移行時のフラグ
3 : Firebird/InterBase6以降。拡張された数値、DATE、TIME、TIMESTAMP型が使用できる。


詳細の説明

 SET SQL DIALECT により、データベースアクセスの SQL Dialect を宣言します。

 Dailect は、1,2,3の中から指定できます。指定を行わなかった場合、コンパイル時 に指定したデータベースの Dialect になります。宣言を行った値とデフォルトの値 が異なった場合は警告が発生しますが、デフォルト値は宣言を行った値に修正 されます。

用例

 埋め込み SQL プログラムでの例です。

EXEC SQL
SET SQL DIALECT 3;

参照

 SHOW SQL DIALECT






SHOW SQL DIALECT

 現在のクライアントの SQL Dialect 設定とデータベースの SQL Dialect 値 を返します。
 gpre, isql, wisql, SQL で使用できます。

構文

SHOW SQL DIALECT;

詳細の説明

 SHOW SQL DIALECT により、現在のクライアントの SQL Dialect 設定と、 データベースの SQL Dialect 値が得られます。得られる設定/値は、1,2,3 のうち のどれかです。
 詳細に関しては、SET SQL DIALECTを参照して下さい。

用例

 埋め込み SQL プログラムでの例です。

EXEC SQL
SHOW SQL DIALECT;

参照

SET SQL DIALECT