以下のSQL文を使用して、データベースへ接続します。
EXEC SQL CONNECT TO target [AS connection-name] [USER user-name] END-EXEC.
targetは以下の方法で指定されます。
dbname[@hostname][:port]
tcp:postgresql://hostname[:port][/dbname][?options]
unix:postgresql://hostname[:port][/dbname][?options]
上記形式のいずれかを含むSQL規約の文字列定数
上記形式のいずれかを含む文字変数への参照
DEFAULT
接続対象をリテラル(つまり、変数を参照しない形)で指定し、その値を引用符でくくらなかった場合、大文字小文字の区別に関して通常のSQLの規則が適用されます。 また、この場合、必要に応じて個々のパラメータを二重引用符で別々にくくることもできます。 実際には、おそらく(単一引用符でくくられた)文字列リテラルもしくは変数の参照を使用した方がエラーをより防止することができます。 DEFAULT接続対象は、デフォルトデータベース、デフォルトのユーザ名で接続を初期化します。 この場合は、ユーザ名と接続名を分けて指定することができません。
ユーザ名を指定するには、別の方法もあります。
username
username/password
username IDENTIFIED BY password
username USING password
これまで同様、usernameとpasswordは、SQL識別子、SQL文字列リテラル、文字型変数への参照を取ることができます。
1つのプログラム内で複数の接続を処理する場合には、connection-nameを使用します。 プログラムで1つしか接続を使わない場合は省略してかまいません。 最も最近に開かれた接続が現在の接続になり、SQL文を実行しようとする時にデフォルトでこの接続が使用されます(本章の後で説明します)。
以下にCONNECT文について、数例を示します。
EXEC SQL CONNECT TO mydb@sql.mydomain.com END-EXEC.
EXEC SQL CONNECT TO unix:postgresql://sql.mydomain.com/mydb AS myconnection USER john END-EXEC.
EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 TARGET PIC X(25). 01 USER PIC X(5). EXEC SQL END DECLARE SECTION END-EXEC. ... MOVE "mydb@sql.mydomain.com" TO TARGET. MOVE "john" TO USER. EXEC SQL CONNECT TO :TARGET USER :USER END-EXEC.
最後の形式では、文字変数参照として上を参照する変数を使用しています。このため、固定長文字列(つまり、VARYINGを指定しない)変数しか使用できません。後続のスペースは無視されます。後の節で、接頭辞にコロンを持つ場合のSQL文内でのCOBOL変数の使用方法について説明します。
接続対象の書式は標準SQLでは規定されていないことに注意してください。 そのため、移植可能なアプリケーションを開発したいのであれば、上の例の最後の方法を参考にして、接続対象文字列をどこかにカプセル化してください。