更新时间:2026-10-21 GMT+08:00
检索查询
在嵌入式SQL中,针对最常用的数据检索操作,SELECT和FETCH指令提供了带有INTO子句的专用变体语法。INTO子句的核心职能是建立查询结果列与C语言内存空间之间的映射关系,指定将提取出的数据库字段值依次存储至对应的宿主变量中。
- SELECT ... INTO:专门用于处理且仅返回单行记录的静态或动态查询。
- FETCH ... INTO:配合游标(Cursor)机制使用,用于流式遍历并逐行提取多行查询结果集。
使用SELECT语句检索单行数据
在单行检索中,INTO子句必须紧跟在选择列表(SELECT List)之后、FROM子句之前。选择列表中的查询列数与INTO后面宿主变量列表的元素个数必须完全一致,且数据类型需满足隐式或显式类型转换映射。若查询结果返回了多行数据,ecpg运行时将抛出错误。
示例如下:
/* 假设数据库中已存在表结构:CREATE TABLE test (a int, b varchar(50)); */ EXEC SQL BEGIN DECLARE SECTION; int v1; VARCHAR v2[50]; EXEC SQL END DECLARE SECTION; ... /* 将单行查询到的字段a和b分别精准写入宿主变量v1和v2中 */ EXEC SQL SELECT a, b INTO :v1, :v2 FROM test WHERE a = 1;
使用FETCH语句检索多行数据
当检索结果包含多行数据时,无法直接通过SELECT ... INTO写入常规宿主变量,必须声明游标进行处理。在FETCH指令中,INTO子句置于整条语句的末尾。
示例如下:
EXEC SQL BEGIN DECLARE SECTION;
int v1;
VARCHAR v2[50];
EXEC SQL END DECLARE SECTION;
...
/* 基于查询语句声明游标 */
EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test;
/* 打开游标以启动查询执行流程 */
EXEC SQL OPEN foo;
...
do
{
/* 逐行提取数据存入宿主变量 */
EXEC SQL FETCH NEXT FROM foo INTO :v1, :v2;
...
} while (...);
/* 显式关闭游标释放底层内存资源 */
EXEC SQL CLOSE foo; 父主题: 数据类型和宿主变量