当使用Pro*C(Oracle for C-Code的嵌入式SQL预处理器)或OCI时,我注意到connect/init例程安装了一些信号处理程序.
这意味着在之前
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbspec ;
Run Code Online (Sandbox Code Playgroud)
或者a
OCIEnvNlsCreate()
Run Code Online (Sandbox Code Playgroud)
我可以验证,例如这些信号有以下处理程序:
No NAME Pointer SA_SIGINFO SIG_DFL SIG_IGN
?????????????????????????????????????????????????????????????????????????????
1 SIGHUP (nil) false true false
2 SIGINT (nil) false true false
3 SIGQUIT (nil) false true false
4 SIGILL (nil) false true false
5 SIGTRAP (nil) false true false
6 SIGABRT (nil) false true false
7 SIGBUS (nil) false true false
8 SIGFPE (nil) false true false
9 SIGKILL (nil) false true false
10 SIGUSR1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将MFC与ProC一起使用.
Functions.pc是我使用ProC语法连接数据库的地方.所以我'Functions.h'在对话框模型中包含了我要调用函数的位置'Funtions.h'.现在我收到了这个错误.
Add directive to 'stdafx.h' or rebuild precompiled header
Run Code Online (Sandbox Code Playgroud)
我明白,我需要包括'stdafx.h'到'Functions.h'它的工作.我做到了.它可以编译,但是当我尝试运行程序时,它将无法识别由'Functions.cpp'创建的ProC创建的语法.我真的不明白如何重建预编译的头,因为我不懂代码'stdafx.h'.
我得到了一些奇怪的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*)(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);
}
Run Code Online (Sandbox Code Playgroud)
传递给上面函数的输入参数值是
pszRowId = [AAAF1lAAIAABOoRAAB], pszMarker=X
Run Code Online (Sandbox Code Playgroud)
查询返回错误代码:02115,并显示以下消息:
SQL Error:02115 Code interpretation problem -- check COMMON_NAME usage
Run Code Online (Sandbox Code Playgroud)
我使用Oracle作为后端数据库.
任何人都可以向我提供有关此查询失败的可能原因的信息吗?
任何帮助都非常感谢.
PRO-C编译期间使用的标志定义如下:
------/u01/app/oracle/product/8.1.6/ORACLE_HOME/bin/proc …Run Code Online (Sandbox Code Playgroud) 我正在使用Oracle 10.2和AIX 5.2预编译包含Pro*C代码的C程序
Oracle预编译器读取$ORACLE_HOME/precomp/admin/pcscfg.cfg file包含sys_include变量定义(设置为/usr/include)的内容.
Pro*C编译器抱怨它不知道size_t类型是什么,并且使用该size_t类型的Oracle头文件报告错误.
这是在sqlcpr.h文件上报告的示例错误:
extern void sqlglm( char*, size_t*, size_t* );
...........................1
PCC-S-02201, Encountered the symbol "size_t" when expecting one of the following
Run Code Online (Sandbox Code Playgroud)
size_tstdio.h在/usr/include目录的头文件中定义.我包括stdio.h我的头example.pc文件之前包括我的sqlcpr.h头.
我发出proc命令如下:
proc iname=example parse=full
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
我正在将HP-Unix下的大量Oracle Pro*C代码迁移到Linux环境中.
在程序中只定义了这样一个主要方法:
main _2a((argc,argv), int argc, char * argv[])
{
...
}
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这样的装饰 - 并且没有找到谷歌的任何东西.无论如何,它的工作原理和我所看到的用作主要功能.
任何人都能说出这个吗?
编辑:好提示 - 有一个宏定义:
# define _2a(list,a1,a2) list a1;a2;
Run Code Online (Sandbox Code Playgroud)
仍然没有明确的观点(对我来说..)
我收到一个错误,在我准备查询时可以看到如下:
SQL-ERR:Preparation of INSERT Query Failed: Ora-Err: -1756 ORA-01756:
quoted string not properly terminated
Run Code Online (Sandbox Code Playgroud)
查询如下:
EXEC SQL declare INSDTA STATEMENT;
EXEC SQL PREPARE INSDTA FROM :stmt;
if(sqlca.sqlcode < 0)
{
DEBUG_LOG("SQL-ERR:Preparation of INSERT Query Failed: Ora-Err: %d %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
DEBUG_LOG("The Query is: %s\n", insertQuery);
return PREPARATION_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)
而日志文件中的查询是:
INSERT INTO TABLENAME
VALUES (
'00000001',
'00004467',
'0',
'R56565',
'03404395',
'20110601',
'999',
'87685785',
'2017-01-10-23.05.26.000000',
'KRMAR',
'KRMAR',
'77898878',
'03',
'00000001',
'U',
'01',
'1',
'87685785',
'R56565',
'89878988',
'cde',
'Andr\351',
'andre.rae@abc.com',
'01192966',
'HGJF',
'00000000', …Run Code Online (Sandbox Code Playgroud) 正如我们在许多文档中所知道的那样,主机数组的第三个元素SQLCA.SQLERRDiesqlca.sqlerrd[2]包含迄今为止由 SQL 语句处理的累积行数(就 Pro*C 而言)。
没有人知道的其他元素,即的意义[0],[1]以及它们意味着什么?
当我尝试预编译包含#warning指令的* .pc文件时,出现以下错误:
PCC-S-02014,在预期以下情况之一时遇到符号“警告”:(bla bla bla)。
如果Pro * C不知道如何处理,我可以说服他们忽略它吗?我无法删除该#warning指令,因为它在无法更改且必须包含的头文件中使用。
我正在使用 pro C 编译数据库库,它将 .ppc 库文件转换为 gcc 可以使用的 .c 文件。但是,我在 pro C 中遇到很多错误,如下所示
PCC-S-02201, Encountered the symbol
"__ attribute__ " when expecting one of
the `following`
...
, Encountered the symbol
"__builtin_va_list" when expecting one of
the `following`
Run Code Online (Sandbox Code Playgroud)
缺失的符号来自一系列标准包含,例如 stdio.h 和 stdlib.h。我该如何解决这个问题?
我正在编译的库来自我们现在正在升级的旧Solaris系统(到新的Solaris 10系统),并且头文件似乎没有使用这些符号。例如较新的 .h 文件有
typedef __builtin_va_list va_list
Run Code Online (Sandbox Code Playgroud)
而旧的 .h 文件有
typedef void* va_list
Run Code Online (Sandbox Code Playgroud)
像这样的事情有很多,所以我不愿意用 typedef 手动修复所有这些问题
oracle-pro-c ×10
c ×6
oracle ×6
sql ×2
c++ ×1
compilation ×1
embedded-sql ×1
gnu ×1
signals ×1