首页 > 解决方案 > 简单的 ODPI-C 语句执行示例给出 ORA-00922

问题描述

我正在尝试使用 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)

在哪里

我希望你能帮助我。

PS 该网站不允许我创建新标签 ODPI-C

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

标签: oracleoracle-call-interfaceodpi-c

解决方案


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 错误。


推荐阅读