我建立了一个Oracle数据库。在写入事务期间触发触发器,该触发器执行外部C dll函数。这是功能:
create or replace FUNCTION KOSARServerTrigDelMultiClients ( ipaddr IN VARCHAR2, datazone in VARCHAR2,
client_id IN NUMBER,
trans_id IN BINARY_INTEGER, cosar_keys IN VARCHAR2, flags IN BINARY_INTEGER) RETURN BINARY_INTEGER AS LANGUAGE C LIBRARY COSAR_DLL_LIB NAME "KOSARTrigDelMultiClient" PARAMETERS ( ipaddr, ipaddr LENGTH, datazone, datazone LENGTH, cosar_keys, cosar_keys LENGTH, trans_id, client_id,flags);
请注意,client_id的类型是number,它可以包含64位整数。
这是C函数的样子:
extern "C" _export int KOSARTrigDelMultiClient(
const char* cstr_cacheServerAddress,
int cacheServerAddress_len,
const char* cstr_datazone,
int datazone_len,
const char* cstr_key,
int key_len,
int trans_id,
long long client_id,
int flags)
{
// do something
}
问题是:我在C中得到的client_id
值与Oracle函数的输入不匹配。例如,
Oracle函数的输入client_id
值:46535657453244546
我在C函数中得到的client_id
值:78607336
如何修复代码以便C ++函数可以从Oracle获得64位输入。我被困了几个小时。非常感谢!抱歉我的英语不好。