更新时间:2026-10-21 GMT+08:00
执行具有输入参数的语句
当动态SQL语句包含运行期变化的输入参数、且不返回结果集时,不能直接使用EXECUTE IMMEDIATE。此时应采用“预编译-绑定参数执行-释放资源”的三段式处理流程:利用问号“?”作为参数占位符,通过PREPARE进行语句预编译,结合EXECUTE ... USING传入参数值,最后使用DEALLOCATE PREPARE释放预编译句柄资源。
准备一个包含问号“?”作为参数占位符的SQL语句。
示例如下:
EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "INSERT INTO test1 VALUES(?, ?);"; int val1 = 42; char val2[50] = "foobar"; EXEC SQL END DECLARE SECTION; ... /* 1.预编译动态SQL语句并关联至句柄mystmt */ EXEC SQL PREPARE mystmt FROM :stmt; ... /* 2.使用USING子句传入宿主变量或常数绑定参数并执行 */ EXEC SQL EXECUTE mystmt USING :val1, :val2; /* 亦可直接使用常量传入,例如:EXEC SQL EXECUTE mystmt USING 42, 'foobar'; */ ... /* 3.当不再需要使用该预编译句柄时,显式释放资源 */ EXEC SQL DEALLOCATE PREPARE mystmt;
父主题: 执行动态SQL语句