Pro-C中的SQL查询失败,错误为:02115
我发现Pro-C程序有一些奇怪的行为,如下所示:Pro-C中的SQL查询失败,错误为:02115,sql,c,oracle-pro-c,embedded-sql,Sql,C,Oracle Pro C,Embedded Sql,我发现Pro-C程序有一些奇怪的行为,如下所示: #define BGHCPY_TO_ORA(dest, source) \ { \ (void)strcpy((void*)(dest).arr, (void*)(source)); \ (dest).len = strlen((const char *)(dest).arr); \ } #define BGHCPY_FROM_ORA(dest, source) \ { \ (void)memcpy((void*)(dest), (void*)(
#define BGHCPY_TO_ORA(dest, source) \
{ \
(void)strcpy((void*)(dest).arr, (void*)(source)); \
(dest).len = strlen((const char *)(dest).arr); \
}
#define BGHCPY_FROM_ORA(dest, source) \
{ \
(void)memcpy((void*)(dest), (void*)(source).arr, (size_t)(source).len); \
(dest)[(source).len] = '\0'; \
}
long fnSQLMarkProcessed (char *pszRowId, char *pszMarker)
{
BGHCPY_TO_ORA (O_rowid_stack, pszRowId);
BGHCPY_TO_ORA (O_cust_processed, pszMarker);
EXEC SQL
UPDATE document_all
SET processed_by_bgh = :O_cust_processed
WHERE rowid = :O_rowid_stack;
return (sqlca.sqlcode);
}
传递给上述函数的输入参数值为
pszRowId = [AAAF1lAAIAABOoRAAB], pszMarker=X
查询返回错误代码:02115,并显示以下消息:
SQL Error:02115 Code interpretation problem -- check COMMON_NAME usage
我使用Oracle作为后端数据库
有人能告诉我此查询失败的可能原因吗?
非常感谢您的帮助
PRO-C编译期间使用的标志定义如下:
------/u01/app/oracle/product/8.1.6/ORACLE_HOME/bin/proc `echo -Dbscs5 -Dsun5 -I/export/home/bscsobw/bscs6/src/CoreDumpIssue/final_Code_Fix_004641 -DNDEBUG -DSunOS53 -D_POSIX_4SOURCES -I/usr/generic++/generic++2.5.3.64_bit/include -DFEATURE_212298 -DBSCS_CONFIG -I/export/home/bscsobw/bscs6//src/bat/include -DFEATURE_00203808_GMD -DFEATURE_00241737 -DORACLE_DB_BRAND -I/u01/app/oracle/product/8.1.6/ORACLE_HOME/rdbms/demo -I/u01/app/oracle/product/8.1.6/ORACLE_HOME/precomp/public -I/export/home/bscsobw/bscs6/src/CoreDumpIssue/final_Code_Fix_004641/include -I../bat/include -DFEATURE61717 -DFEATURE52824 -DFEATURE56178 -DD236312_d -DSDP -g | sed -e 's/-I/INCLUDE=/g' -e 's/-D[^ ]=[^ ]*//g' -e 's/-D\([^ ]*\)/DEFINE=\1/g'` select_error=no DEFINE=FEATURE61717 DEFINE=FEATURE52824 DEFINE=FEATURE56178 \
lines=yes iname=bgh_esql.pc oname=bgh_esql.c lname=bgh_esql.lis
我想,您可以查看以下消息:
[oracle@sb-rac02 ~]$ oerr sql 2115
02115, 00000, "Code interpretation problem -- check COMMON_NAME usage"
// *Cause: With PRO*FORTRAN, this error occurs if the precompiler option
// COMMON_NAME is specified incorrectly. **With other Oracle
// Precompilers, this error occurs when the precompiler cannot
// generate a section of code.**
// *Action: With Pro*FORTRAN, when using COMMON_NAME to precompile two or
// more source modules, make sure to specify a different common name
// for each module. With other Oracle Precompilers, if the error
// persists, call customer support for assistance.
所以你可以确定,这个问题不在你的变量里
请尝试使用以下代码:
long fnSQLMarkProcessed (char *pszRowId, char *pszMarker)
{
BGHCPY_TO_ORA (O_rowid_stack, pszRowId);
BGHCPY_TO_ORA (O_cust_processed, pszMarker);
EXEC SQL UPDATE document_all
SET processed_by_bgh = :O_cust_processed
WHERE rowid = :O_rowid_stack;
return (sqlca.sqlcode);
}
这不是Oracle PL/SQL代码。很抱歉,这是一个错误,这是Pro-C中的代码段。存在“fnSQLMarkProcessed”显示的间歇性行为过程。请显示完整的编译器命令行。O_rowid_stack和O_cust_processed是否已在其他地方分配/定义???@TonyB:这些被定义为全局变量VARCHAR O_rowid_stack[20];/*堆栈上的当前rowid*/VARCHAR O_cust_processed[2];