- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序从外部源(配置文件)接收查询,因此它必须从查询结果中获取列。我有一些代码:
typedef union _DbField {
text text[512];
sword integer;
double precise;
} DbField;
typedef struct _Arg {
size_t argSize;
DbField field;
} Arg;
OCIEnv *envhp;
OCISession *authp = (OCISession *) 0;
OCIError *errhp;
OCISvcCtx *svchp;
OCIServer *srvhp;
OCIStmt *statementHandler;
OCIDefine *defnp = (OCIDefine *) 0;
sword status;
...
//int main()
status = OCIEnvCreate((OCIEnv **) &envhp, (ub4) OCI_DEFAULT, (dvoid *) 0,
(dvoid * (*)(dvoid *, size_t)) 0, (dvoid * (*)(dvoid *, dvoid *, size_t)) 0,
(void (*)(dvoid *, dvoid *)) 0, (size_t) 0, (dvoid **) 0);
checkError(0, __LINE__);
status = OCIHandleAlloc((dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR, (size_t) 0,
(dvoid **) 0);
checkError(0, __LINE__);
status = OCIHandleAlloc((dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER, (size_t) 0,
(dvoid **) 0);
checkError(0, __LINE__);
status = OCIHandleAlloc((dvoid *) envhp, (dvoid **) &svchp, OCI_HTYPE_SVCCTX, (size_t) 0,
(dvoid **) 0);
checkError(0, __LINE__);
status = OCIHandleAlloc((dvoid *) envhp, (dvoid **) &statementHandler, OCI_HTYPE_STMT,
(size_t) 0, (dvoid **) 0);
checkError(0, __LINE__);
status = OCIServerAttach(srvhp, errhp, (text *) connection->dbName, (sb4) strlen((char *) connection->dbName), 0);
status = OCIServerAttach(srvhp, errhp, (text *) "", (sb4) strlen((char *) ""), 0);
checkError(0, __LINE__);
status = OCIAttrSet((dvoid *) svchp, OCI_HTYPE_SVCCTX, (dvoid *) srvhp, (ub4) 0,
OCI_ATTR_SERVER, (OCIError *) errhp);
if (status != 0) {
printf("HANDLER ERROR %d !!!\n\n", status);
exit(2);
}
(void) OCIHandleAlloc((dvoid *) envhp, (dvoid **) &authp, (ub4) OCI_HTYPE_SESSION,
(size_t) 0, (dvoid **) 0);
(void) OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION, (dvoid *) connection->userName,
(ub4) strlen((char *) connection->userName), (ub4) OCI_ATTR_USERNAME, errhp);
(void) OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
(dvoid *) connection->userPassword,
(ub4) strlen((char *) connection->userPassword), (ub4) OCI_ATTR_PASSWORD, errhp);
status = OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, (ub4) OCI_DEFAULT);
(void) OCIAttrSet((dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX, (dvoid *) authp, (ub4) 0,
(ub4) OCI_ATTR_SESSION, errhp);
errhp, OCIHandleAlloc((dvoid *) envhp, (dvoid **) &statementHandler, OCI_HTYPE_STMT,
(size_t) 0, (dvoid **) 0);
executeStatement("SELECT * FROM logs order by log_id");
//end of int main()
static inline sword executeStatement(char *statement) {
int rowsFetched = 0;
int forSecond = 0;
ub4 numcols = 0;
ub2 dtype = 0;
OCIStmt *structureHandler;
OCIParam *colhd = (OCIParam *) 0;
char *statementCopy = malloc(strlen(statement));
memcpy(statementCopy, statement, strlen(statement));
status = OCIHandleAlloc((dvoid *) envhp, (dvoid **) &structureHandler, OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0);
checkError(1, __LINE__);
status = OCIStmtPrepare(structureHandler, errhp, statementCopy, (ub4) strlen((char *) statement), (ub4)OCI_NTV_SYNTAX, (ub4) OCI_NO_SHARING);
checkError(1, __LINE__);
status = OCIStmtExecute(svchp, structureHandler, errhp, (ub4) 1, (ub4) 0,(const OCISnapshot *) NULL, (OCISnapshot *) NULL, (ub4) OCI_DESCRIBE_ONLY);
checkError(1, __LINE__);
OCIAttrGet((dvoid *)structureHandler, OCI_HTYPE_STMT, (dvoid *)&numcols, (ub4 *)0, OCI_ATTR_PARAM_COUNT, errhp);
ub2 colTypes[numcols];
Arg columns[numcols];
for (int a = 0; a < numcols; ++a) {
OCIParamGet((dvoid *)structureHandler, OCI_HTYPE_STMT, errhp, (dvoid **)&colhd, a+1);
OCIAttrGet((dvoid *)colhd, OCI_DTYPE_PARAM,(dvoid *)&dtype, (ub4 *)0, OCI_ATTR_DATA_TYPE, errhp);
colTypes[a] = dtype;
printf("Coltype %d\t\t", colTypes[a]);
if (colTypes[a] == SQLT_INT || colTypes[a] == SQLT_NUM) {
columns[a].argSize = sizeof(int);
printf("Param is %d INT, size %d ", a, columns[a].argSize);
status = OCIDefineByPos(statementHandler, &defnp, errhp, a+1, (dvoid *)&(columns[a].field.integer), (sword) columns[a].argSize, colTypes[a], (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, OCI_DEFAULT);
if (status == 0) {
printf("Param %d bind OK\n", a+1);
} else {
printf("Binding %d param caused error!!!\n", a+1);
}
fflush(stdout);
} else if (colTypes[a] == SQLT_STR || colTypes[a] == SQLT_CLOB) {
columns[a].argSize = sizeof(char)*1024;
status = OCIDefineByPos(statementHandler, &defnp, errhp, a+1, (dvoid *)&(columns[a].field.text), (sword) columns[a].argSize, colTypes[a], (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, OCI_DEFAULT);
printf("Param is %d STR, size %d ", a, columns[a].argSize);
if (status == 0) {
printf("Param %d bind OK\n", a+1);
} else {
printf("Binding %d param caused error!!!\n", a+1);
}
fflush(stdout);
} else if (colTypes[a] == SQLT_TIMESTAMP) {
columns[a].argSize = sizeof(char)*768;
status = OCIDefineByPos(statementHandler, &defnp, errhp, a+1, (dvoid *)&(columns[a].field.text), (sword) columns[a].argSize, colTypes[a], (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, OCI_DEFAULT);
printf("Param is %d TIMESTAMP, size %d ", a, columns[a].argSize);
if (status == 0) {
printf("Param %d bind OK\n", a+1);
} else {
printf("Binding %d param caused error!!!\n", a+1);
}
fflush(stdout);
} else {
//Other types are not needed for me right now
perror("Invalid column type\n\n");
printf("Other type for [%d]: %d\n", a, colTypes[a]);
fflush(stdout);
exit(3);
}
}
status = OCIStmtPrepare(statementHandler, errhp, statement, (ub4) strlen((char *) statement), (ub4)OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
checkError(0, __LINE__);
//ERROR IN LINE ABOVE
status = OCIStmtExecute(svchp, statementHandler, errhp, (ub4) 1, (ub4) 0,(const OCISnapshot *) NULL, (OCISnapshot *) NULL, (ub4) OCI_DEFAULT);
checkError(0, __LINE__);
status = OCIAttrGet(statementHandler, OCI_HTYPE_STMT, (void*)&rowsFetched, NULL, OCI_ATTR_ROWS_FETCHED, errhp);
printf("Total rows: %d, status %d.\n", rowsFetched, status);
if (rowsFetched == 0) {
printf("No data!\n");
return OCI_NO_DATA;
}
do {
printf("ROW ");
for (int a = 0; a < numcols; ++a) {
if (colTypes[a] == SQLT_INT || colTypes[a] == SQLT_NUM) {
printf(" INT %d", columns[a].field.integer);
} else if (colTypes[a] == SQLT_STR || colTypes[a] == SQLT_CLOB) {
printf(" TXT %s", columns[a].field.text);
} else if (colTypes[a] == SQLT_TIMESTAMP) {
printf(" TIMESTAMP %s", columns[a].field.text);
} else {
perror("Invalid column type\n\n");
printf("Other type for [%d]: %d\n", a, colTypes[a]);
fflush(stdout);
exit(3);
}
}
printf("\n");
status = OCIStmtFetch2(statementHandler, errhp, 1, OCI_DEFAULT, (sb4) 1, OCI_DEFAULT);
} while (status != OCI_NO_DATA && status != OCI_ERROR);
return OCI_SUCCESS;
}
标记行中的此代码会导致错误 ORA-24374:在获取或执行和获取之前未完成定义。我的应用程序说列数与查询匹配并且绑定(bind)正常。我不知道该怎么办。
最佳答案
您需要移动此行:
status = OCIStmtPrepare(statementHandler, errhp, statement, (ub4) strlen((char *) statement), (ub4)OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
... 在您开始调用 OCIDefineByPos(statementHandler, ...)
之前.
这可能是 executeStatement
中的第一个 OCI 调用真的,在你对 structureHandler
做任何事情之前。但它需要在 for (int a = 0; a < numcols; ++a)
之前无论如何,循环。
我相信在早期版本(9i 和之前的版本?)中,该顺序并没有严格执行,但现在您必须在定义绑定(bind)变量之前做好准备。
关于c - 错误: Define not done before fetch or execute and fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484087/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!