Ошибка ORA-00933: команда SQL неправильно завершилась при выборе с помощью команды ODBC

Я пытаюсь выполнить запрос к базе данных Oracle с использованием ODBC в .NET и получаю следующую ошибку:

ORA-00933: SQL command not properly ended

Однако оператор SQL определенно верен, и я могу успешно выполнить его из Oracle SQL Developer. Сам запрос выглядит так:

SELECT * FROM TABLE(SCHEMA.PKG.SPNAME('PARAMS'));

Другой простой запрос отлично работает:

SELECT COUNT(*) FROM SCHEMA.MYTABLE

Похоже, что что-то с первым, где он использует пакет в запросе и что-то ломается. Ошибка указывает на то, что он не закончился должным образом, но в нем есть точка с запятой и правильные фигурные скобки, поэтому кажется, что происходит что-то еще.

Если я удалю конечную точку с запятой, я получаю сообщение об ошибке без сообщения.

Мой код на C # базовый и выглядит так:

using (var connection = new OdbcConnection(connectionString))
{
    using (var command = connection.CreateCommand())
    {
        command.CommandText = commandText;

        connection.Open();
        var result = command.ExecuteScalar();
        connection.Close();

        Console.WriteLine(result);
    }
}

При использовании библиотеки Oracle для .NET она работает, когда я удаляю конечную точку с запятой. Если я оставлю это на месте, возникнет та же ошибка о неправильном завершении команды SQL.

Похоже, этот запрос должен работать с ODBC. Есть ли что-то, что мне нужно, чтобы заставить его работать, или я использую Oracle Managed Data Provider единственный способ?


person Mun    schedule 21.10.2015    source источник
comment
какую версию OracleDataClient вы используете ..   -  person MethodMan    schedule 22.10.2015
comment
Здесь такая же ситуация. С удаленной базой данных Oracle 11g вполне нормально иметь точку с запятой или несколько операторов при выполнении одного запроса; тогда как с локальным Oracle 18c db это запрещено ...   -  person Kiruahxh    schedule 10.04.2019


Ответы (2)


По своему опыту я заметил несколько случаев, когда точка с запятой прерывала запрос, например, JasperSoft Studio и модуль cx_Oracle Python. Я очень мало знаю о ODBC и OracleDataClient, но я предполагаю, что это аналогичная ситуация.

person McGlothlin    schedule 21.10.2015

Я бы не стал использовать ODBC, я бы сделал что-то подобное с помощью OracleDataClient

var strSQL = "SELECT * FROM TABLE(SCHEMA.PKG.SPNAME('PARAMS'));";
using (OracleConnection connStr = new OracleConnection(connectionString))
{         
    using (OracleCommand cmd = new OracleCommand(strSQL, connStr))
    {
        cmd.CommandType = CommandType.Text;
        cmd.Connection.Open();
        cmd.ExecuteScalar(); //change the ExecuteScalar to fit the proper call
    }
}
person MethodMan    schedule 21.10.2015