诗岑 2023-12-07 13:06 采纳率: 93%
浏览 4
已结题

未定义标识符ERRCALL

已连接Oracle数据库

#include<iostream>
#include<occi.h>
#include<oci.h>

using namespace std;
using namespace oracle::occi;

int main()
{
    OCIEnv *envhp;
    OCIStmt *stmthp;
    OCIServer *srvhp;
    OCISession *sesshp; 
    OCIError *errhp;
    OCISvcCtx *svchp;

    // 申请OCI环境句柄
    int err = OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid*)0, (dvoid*(*)(dvoid*, size_t))0, (dvoid*(*)(dvoid*, dvoid*, size_t))0, (void(*)(dvoid*, dvoid*))0, (size_t)0, (dvoid**)0);

    // 申请服务句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0);

    // 申请会话句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&sesshp, OCI_HTYPE_SESSION, (size_t)0, (dvoid**)0);

    // 申请语句句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0);

    // 设置服务名称
    const char* db_name = "orcl";
    ub4 OCI_ATTR_SERVER_NAME;
    err = OCIAttrSet(srvhp, OCI_HTYPE_SERVER, (dvoid*)db_name, strlen(db_name), OCI_ATTR_SERVER_NAME, errhp);

    // 连接数据库
    const char* user_name = "system";//连接的用户名
    const char* password = "123456";//连接的密码
    const char* dblink = 0;//连接方式
    ub4 dblink_len = 0;
    err = OCILogon2(envhp, errhp, &svchp, (CONST OraText*)user_name, strlen(user_name), (CONST OraText*)password, strlen(password), (CONST OraText*)dblink, (ub4)dblink_len, 0);

    // 执行SQL语句
    const char* sql = "select empno from emp where empno=:1";
    err = OCIStmtPrepare(stmthp, errhp, (CONST OraText*)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);

    ub2 empno = 7900;// 输入的empno
    OCIBind* bindhp;
    err = OCIBindByPos(stmthp, &bindhp, errhp, 1, &empno, sizeof(empno), SQLT_INT, 0, 0, 0, 0, 0, OCI_DEFAULT);

    OCIDefine* dfnhp;
    ub2 out_empno;
    ub2 ind;
    ub2 out_len;
    ERRCALL(OCIDefineByPos(stmthp, &dfnhp, errhp, 1, (dvoid*)&out_empno, sizeof(out_empno), SQLT_INT, &ind, &out_len, 0, OCI_DEFAULT));

    err = OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT);

    err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
    while(err == OCI_SUCCESS)
    {
        cout << out_empno << endl;
        err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
    }

    // 断开连接
    OCILogoff(svchp, errhp); 
    OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
    OCIHandleFree(sesshp, OCI_HTYPE_SESSION); 
    OCIHandleFree(stmthp, OCI_HTYPE_STMT); 
    OCIHandleFree(envhp, OCI_HTYPE_ENV); 

    return 0;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-07 14:28
    关注

    【以下回答由 GPT 生成】

    问题:请问您在编写SQL代码时遇到了什么问题? 答:在编写SQL代码时,我可能遇到了以下几种问题:

    1. 语法错误:可能由于拼写错误、缺少引号、漏掉关键字或错误使用SQL语句的结构等原因导致代码语法错误。

    2. 未定义的标识符:可能在SQL代码中使用了未定义的变量、表名、列名或函数名等标识符。这可能会导致编译错误或运行时错误。

    3. 数据类型不匹配:可能因为在SQL查询或操作中使用了不兼容的数据类型而导致错误。例如,将字符串值与数字列相加可能会导致类型不匹配错误。

    4. 逻辑错误:可能由于SQL查询的逻辑错误而导致结果不正确。这可能包括错误的SQL JOIN语句、WHERE条件错误或使用错误的聚合函数等。

    问题:是否可以提供更多关于未定义标识符ERRCALL的信息? 答:关于未定义标识符ERRCALL的信息相对较少,因为上下文很重要。ERRCALL可能是自定义的变量、表名、列名或函数名,也可能是系统函数或预定义变量。要获取更多关于ERRCALL的信息,需要检查代码中是否有变量、表名、列名或函数名等相关定义,以确定ERRCALL的具体含义。

    问题:您是否遇到了编译错误或者运行时错误? 答:根据问题描述,我无法确定是否遇到了编译错误或运行时错误。对于编译错误,通常会在编译代码时显示错误消息,并指示出现错误的具体位置。而运行时错误则是在代码执行期间发生的错误,可能会导致程序崩溃或返回错误结果。

    问题:对于这些问题,您希望如何解决? 答:如果我遇到了编写SQL代码时的问题,我会采取以下措施来解决:

    1. 检查语法错误:仔细检查SQL代码,确保使用正确的语法、关键字和结构。可以参考数据库文档或其他可靠资源了解正确的语法规则。

    2. 检查未定义标识符:检查SQL代码中是否存在未定义的变量、表名、列名或函数名。确保所有标识符都已正确定义,并根据需要添加必要的别名或引用。

    3. 检查数据类型:确保在SQL查询或操作中使用的数据类型与目标列或变量的数据类型兼容。可以使用CAST或CONVERT函数进行类型转换。

    4. 逻辑错误的调试:对于逻辑错误,我会检查SQL查询的逻辑,确保JOIN语句、WHERE条件和聚合函数等的使用正确。可以使用调试工具或逐步执行来查找并修复错误。

    5. 通过查找资料:如果遇到了特定的错误消息或问题,我会在互联网上搜索相关问题和解决方案。常见的技术论坛、开发者社区和官方文档都可能提供有关解决特定问题的指导。

    需要注意的是,具体解决方法可能因问题的具体情况而有所不同。以上是一般性的错误排查步骤,可以根据具体的问题和错误消息进一步调查和解决。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月8日
  • 修改了问题 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序