简单的ODPI-C语句执行示例

问题描述 投票:0回答:1

我正在尝试使用ODPI-C执行简单的SQL查询

dpiStmt* stmt;
const char* query = "CREATE TABLE schema_name.Z_TEST(\n"
                    "    person_id NUMBER NOT NULL,\n"
                    "    first_name VARCHAR2(50) NOT NULL,\n"
                    "    last_name VARCHAR2(50) NOT NULL,\n"
                    "    PRIMARY KEY(person_id)\n"
                    ");";
dpiConn_prepareStmt(conn.connection_, 0, query, strlen(query), nullptr,0, &stmt);

if(dpiStmt_execute(stmt, DPI_MODE_EXEC_DEFAULT, nullptr) == DPI_FAILURE)
{

    throw std::runtime_error(get_context_error_string(conn.db_context_));
}

但是出现错误

ERROR: ORA-00922: missing or invalid option (dpiStmt_execute : execute)

哪里

  • conn是具有dpiConn *连接_的结构。(已通过dpiConn_ping测试)
  • get_context_error_string(dpiContext *);使用dpiErrorInfo返回上下文的最后一个错误。

希望您能帮助我。

P.S。该网站不允许我创建新标签ODPI-C

编辑:我检查了有关架构名称和上下文/连接存在的所有内容

oracle oci
1个回答
0
投票

DDL语句现在应该在末尾加分号。那是一个客户语句分隔符,不是语句的一部分。更改为:

const char* query = "CREATE TABLE schema_name.Z_TEST(\n"
                    "    person_id NUMBER NOT NULL,\n"
                    "    first_name VARCHAR2(50) NOT NULL,\n"
                    "    last_name VARCHAR2(50) NOT NULL,\n"
                    "    PRIMARY KEY(person_id)\n"
                    ")";

在某些情况下,杂散的分号会导致ORA-00911错误而不是ORA-00922错误。

© www.soinside.com 2019 - 2024. All rights reserved.