31.2. データベースサーバへの接続

以下の文を使用して、データベースへ接続します。

EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];

targetは以下の方法で指定されます。

接続目標をリテラル(つまり、変数を参照しない形)で指定し、その値を引用符で括らなかった場合、 大文字小文字の区別に関して通常のSQLの規則が適用されます。 また、この場合、必要に応じて個々のパラメータを二重引用符で別々に括ることもできます。 実際には、おそらく(単一引用符で括られた)文字列リテラルもしくは変数の参照を使用した方がエラーをより防止することができます。 DEFAULT接続目標は、デフォルトデータベース、デフォルトのユーザ名で接続を初期化します。 この場合は、ユーザ名と接続名を分けて指定することができません。

ユーザ名を指定するには、別の方法もあります。

これまで同様、usernamepasswordは、SQL識別子、SQL文字列リテラル、文字型変数への参照を取ることができます。

1つのプログラム内で複数の接続を処理する場合には、connection-nameを使用します。 プログラムで1つしか接続を使わない場合は、省略して構いません。 最も最近に開かれた接続が現在の接続になり、SQL文を実行しようとする時にデフォルトでこの接続が使用されます(本章の後で説明します)。

以下にCONNECT文について、数例を示します。

EXEC SQL CONNECT TO mydb@sql.mydomain.com;

EXEC SQL CONNECT TO unix:postgresql://sql.mydomain.com/mydb AS myconnection USER john;

EXEC SQL BEGIN DECLARE SECTION;
const char *target = "mydb@sql.mydomain.com";
const char *user = "john";
EXEC SQL END DECLARE SECTION;
 ...
EXEC SQL CONNECT TO :target USER :user;

最後の形式では、文字変数参照として上を参照する変数を使用しています。 後の節で、接頭子にコロンを持つ場合のSQL文内でのC変数の使用方法について説明します。

接続目標の書式は標準SQLでは規定されていないことに注意してください。 そのため、移植可能なアプリケーションを開発したいのであれば、上の例の最後の方法を基にして、接続目標文字列をどこかにカプセル化してください。