如何在 DB2 SQL 中打印出 SQLHSTMT 变量的值?
How to print out the value of a SQLHSTMT variable in DB2 SQL?
具有如下示例的代码:
SQLHANDLE listings_hstmt;
SQLRETURN InsertListing( struct listing *l, int *errorCode )
{
...
sqlrc = SQLBindParameter( listings_hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &update_id, 0, NULL );
CHECK_STMT_ERR( listings_hstmt, sqlrc );
sqlrc = SQLBindParameter( listings_hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &exchange_id, 0, NULL );
CHECK_STMT_ERR( listings_hstmt, sqlrc );
len = 1;
sqlrc = SQLBindParameter( listings_hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 1, 0, (SQLCHAR*)&(l->action), 1, &len );
CHECK_STMT_ERR( listings_hstmt, sqlrc );
...
sqlrc = SQLExecute( listings_hstmt ) ;
...
}
运行程序,我得到这个错误:
[IBM][CLI Driver][DB2/LINUXX8664] SQLSTATE 01517: A character that could not be converted was replaced with a substitute character.
我想打印出 sql 语句以查看详细信息,因此添加了如下内容:
printf(" The statement is %s\n", listings_hstmt);
然而,添加了这个调试 printf
,我所能得到的只是一个分段错误。
那么,我怎样才能在执行之前知道最终的 sql 语句是什么?
P.S.: OS 是 CentOS Linux,而我们使用 DB2 作为后端数据库服务器。
如果您可以控制您的客户端应用程序,大概您可以在调用 SQLExecute()
之前打印出所有绑定变量的值。
或者,也许更好,仅当 SQLExecute 调用失败时才打印出绑定变量的值。
否则,您将不得不在客户端级别打开跟踪或在服务器级别使用一些事件监视器。这两个选项都会生成大量数据,对于此类调试工作可能用处不大。
具有如下示例的代码:
SQLHANDLE listings_hstmt;
SQLRETURN InsertListing( struct listing *l, int *errorCode )
{
...
sqlrc = SQLBindParameter( listings_hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &update_id, 0, NULL );
CHECK_STMT_ERR( listings_hstmt, sqlrc );
sqlrc = SQLBindParameter( listings_hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &exchange_id, 0, NULL );
CHECK_STMT_ERR( listings_hstmt, sqlrc );
len = 1;
sqlrc = SQLBindParameter( listings_hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 1, 0, (SQLCHAR*)&(l->action), 1, &len );
CHECK_STMT_ERR( listings_hstmt, sqlrc );
...
sqlrc = SQLExecute( listings_hstmt ) ;
...
}
运行程序,我得到这个错误:
[IBM][CLI Driver][DB2/LINUXX8664] SQLSTATE 01517: A character that could not be converted was replaced with a substitute character.
我想打印出 sql 语句以查看详细信息,因此添加了如下内容:
printf(" The statement is %s\n", listings_hstmt);
然而,添加了这个调试 printf
,我所能得到的只是一个分段错误。
那么,我怎样才能在执行之前知道最终的 sql 语句是什么?
P.S.: OS 是 CentOS Linux,而我们使用 DB2 作为后端数据库服务器。
如果您可以控制您的客户端应用程序,大概您可以在调用 SQLExecute()
之前打印出所有绑定变量的值。
或者,也许更好,仅当 SQLExecute 调用失败时才打印出绑定变量的值。
否则,您将不得不在客户端级别打开跟踪或在服务器级别使用一些事件监视器。这两个选项都会生成大量数据,对于此类调试工作可能用处不大。