我们用下面的语句与一个数据库连接:
EXEC SQL CONNECT TO 目标 [AS 连接名] [USER 用户名];
目标 可以用下面的方法声明:
数据库名[@主机名][:端口]
tcp:postgresql://主机名[:端口][/数据库名][?选项]
unix:postgresql://主机名[:端口][/数据库名][?选项]
一个包含上面形式的 SQL 字串文本
一个对包含上面的形式之一的字符串变量的引用
DEFAULT
如果你用文本声明连接目标(也就说说,不是通过一个变量引用),而且 你还不引用这个数值,那么使用普通 SQL 的大小写无关的规则。这种情况下, 你也可以根据需要独立地对参数使用双引号包围。实际上,可能用一个(单引号引起) 地字串文本或者变量引用作为连接目标可能更结实一些。连接目标 DEFAULT 发起一个用缺省用户名对缺省数据库地连接。这个时候不应该声明用户名或连接名。
声明用户名的方法也有几种不同方式:
用户名
用户名/口令
用户名 IDENTIFIED BY 口令
用户名 USING 口令
和上面一样, 用户名和口令 可以是一个 SQL 标识符,一个字符变量,或者一个字符串。
连接名 用于处理一个程序里的多个连接。 如果一个程序只使用一个连接,则可以省略它。最近打开的连接成为当前连接, 在准备执行 SQL 语句的时候,缺省时会使用这个连接(参阅本章稍后部分)。
这里是一些 CONNECT 语句的例子:
EXEC SQL CONNECT TO [email protected]; EXEC SQL CONNECT TO 'unix:postgresql://sql.mydomain.com/mydb' AS myconnection USER john; EXEC SQL BEGIN DECLARE SECTION; const char *target = "[email protected]"; const char *user = "john"; EXEC SQL END DECLARE SECTION; ... EXEC SQL CONNECT TO :target USER :user;
最后的一个形式使用了上面说过的变量引用的方法。在后面的小节里你会 看到在 SQL 语句里如何使用前缀了冒号的 C 变量。
请注意连接目标的格式没有在 SQL 标准里说明。所以,如果你想 书写可一直的应用,你可能会想使用类似上面的最后一个例子这样 的方法来把连接目标字串封装在什么地方。