30.4. 运行 SQL 命令

在嵌入的 SQL 应用中可以运行任何 SQL 命令。下面是一些如何使用它们的例子。

创建一个表:

EXEC SQL CREATE TABLE foo (number integer, ascii char(16));
EXEC SQL CREATE UNIQUE INDEX num1 ON foo(number);
EXEC SQL COMMIT;

插入一些行:

EXEC SQL INSERT INTO foo (number, ascii) VALUES (9999, 'doodad');
EXEC SQL COMMIT;

删除一些行:

EXEC SQL DELETE FROM foo WHERE number = 9999;
EXEC SQL COMMIT;

单行 select:

EXEC SQL SELECT foo INTO :FooBar FROM table1 WHERE ascii = 'doodad';

使用游标的 select:

EXEC SQL DECLARE foo_bar CURSOR FOR
    SELECT number, ascii FROM foo
    ORDER BY ascii;
EXEC SQL FETCH foo_bar INTO :FooBar, DooDad;
...
EXEC SQL CLOSE foo_bar;
EXEC SQL COMMIT;

更新:

EXEC SQL UPDATE foo
    SET ascii = 'foobar'
    WHERE number = 9999;
EXEC SQL COMMIT;

形如 :something 这样的记号是宿主变量,也就是说, 它们指向 C 程序里的变量。我们在下一节里解释这些话题。

在缺省模式下,语句只有在发出了 EXEC SQL COMMIT 的时候才提交。嵌入的 SQL 接口也支持事务的自动提交(类似 libpq 的行为), 方法是通过给 ecpg (见下文) 增加命令行选项 -t,或者是通过 EXEC SQL SET AUTOCOMMIT TO ON 语句。 在自动提交模式里,每条命令都是自动提交的,除非它们包围在一个明确的事务块里。 这个模式可以用 EXEC SQL SET AUTOCOMMIT TO OFF 明确地关闭。