30.2. 与数据库服务器连接

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

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

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

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

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

和上面一样, 用户名口令 可以是一个 SQL 标识符,一个字符变量,或者一个字符串。

连接名 用于处理一个程序里的多个连接。 如果一个程序只使用一个连接,则可以省略它。最近打开的连接成为当前连接, 在准备执行 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 标准里说明。所以,如果你想书写可以移植的应用, 你可能会想使用类似上面的最后一个例子这样的方法来把连接目标字串封装在什么地方。