30.2. 与数据库服务器连接

我们用下面的语句与一个数据库连接:

EXEC SQL CONNECT TO 目标 [AS 连接名] [USER 用户名];

目标 可以用下面的方法声明:

如果你用文本声明连接目标(也就说说,不是通过一个变量引用),而且 你还不引用这个数值,那么使用普通 SQL 的大小写无关的规则。这种情况下, 你也可以根据需要独立地对参数使用双引号包围。实际上,可能用一个(单引号引起) 地字串文本或者变量引用作为连接目标可能更结实一些。连接目标 DEFAULT 发起一个用缺省用户名对缺省数据库地连接。这个时候不应该声明用户名或连接名。

声明用户名的方法也有几种不同方式:

和上面一样, 用户名口令 可以是一个 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 标准里说明。所以,如果你想 书写可一直的应用,你可能会想使用类似上面的最后一个例子这样 的方法来把连接目标字串封装在什么地方。