SQLExecute-执行语句
SQLExecute() 运行一次或多次使用 SQLPrepare() 成功准备的语句。 将使用 SQLBindParam()绑定到参数标记的任何应用程序变量的当前值来处理该语句。
语法
SQLRETURN SQLExecute (SQLHSTMT hstmt); 函数自变量
| 数据类型 | 自变量 | 使用 | 描述 |
|---|---|---|---|
| SQLHSTMT | hstmt | 输入 | 语句句柄。 不能有与 hstmt 关联的打开游标,请参阅 SQLFreeStmt -Free (或 reset) a statement handle 以获取更多信息。 |
用法
SQL 语句字符串可能包含参数标记。 参数标记由 "?" 表示 字符,并在调用 SQLExecute() 时指示语句中要替换应用程序变量值的位置。 SQLBindParam() 用于将应用程序变量绑定 (或关联) 到每个参数标记,并指示在传输数据时是否应执行任何数据转换。 在调用 SQLExecute()之前,必须绑定所有参数。
一旦应用程序处理了 SQLExecute() 调用的结果,它就可以在应用程序变量中使用新的 (或相同的) 值再次处理该语句。
无法通过调用 SQLExecute()来重新处理由 SQLExecDirect() 处理的语句; 必须首先调用 SQLPrepare() 。
如果预编译 SQL 语句是 SELECT ,那么 SQLExecute() 将生成游标名,并打开该游标。 如果应用程序使用 SQLSetCursorName() 将游标名称与语句句柄关联起来,Db2 for i CLI 会将应用程序生成的游标名称与内部生成的游标名称关联起来。
要多次处理 SELECT 语句,应用程序必须通过调用带有 SQL_CLOSE 选项的 SQLFreeStmt() 来关闭游标。 调用 SQLExecute()时,语句句柄上不得有打开的游标。
要从 SELECT 语句生成的结果集中检索行,请在 SQLExecute() 成功返回后调用 SQLFetch() 。
如果 SQL 语句是定位 DELETE 或定位 UPDATE 语句,那么在调用 SQLExecute() 时,该语句所引用的游标必须定位在行上,并且必须定义在同一连接句柄下的单独语句句柄上。
返回码
- SQL_SUCCESS
- sql_success_with_info
- SQL_ERROR
- sql_invalid_handle
- sql_noo_data_found
- SQL_NEED_DATA
如果 SQL 语句是 "已设置的 UPDATE" 或 "已设置的 DELETE" ,并且没有任何行满足搜索条件,那么将返回 SQL_NO_DATA_FOUND。
诊断
SQLExecute() 的 SQLSTAT 包括 SQLExecDirect() 的所有 SQL STAT (请参阅 表 2) ,但 HY009 除外,并在下表中添加了 SQLSTAT。| SQLSTATE | 描述 | 说明 |
|---|---|---|
| HY009 | 语句选项无效 | 与正在执行的语句相关联的属性无效。 |
| HY010 | 函数顺序错误 | 指定的 hstmt 未处于已准备状态。 在不首先调用 SQLPrepare的情况下调用 SQLExecute() 。 |
| HY021 | 内部描述符无效 | 无法寻址或分配内部描述符,或者它包含无效的值。 |
注: 在处理语句时,可以由数据库管理系统 (DBMS) 生成许多其他 SQLSTATE 值。
|
||
示例
请参阅 SQLprepare-Prepare a statement 中的示例