Я пытаюсь вызвать довольно простую процедуру, и если я в редакторе Toad, она работает нормально:
BEGIN OtherSchema.P_CloseBatch('BatchName'); END;
Эта схема имеет разрешения на выполнение P_CloseBatch, который существует в OtherSchema.
Я подключаюсь в C# к той же схеме, используя этот код:
try
{
using (OracleConnection connection = new OracleConnection(oracleStgConnectionString))
{
connection.Open();
OracleCommand command = new OracleCommand();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "BEGIN OtherSchema.P_CloseBatch('BatchName'); END;";
command.ExecuteNonQuery();
connection.Close();
}
}
catch (Exception e)
{
Log.Info(e.Message);
}
И когда я получаю команду. ExecuteNonQuery, это дает мне длинную ошибку:
{"ORA-06550: строка 1, столбец 83: \ nPLS-00103: обнаружен символ \") \ "при ожидании одного из следующих действий: \ n \ n (- + case mod new not null \ n \ n продолжить среднее число текущих существует макс. мин. до sql стандартное отклонение \ n отклонение суммы выполнить интервал времени слияния времени слияния \ n дата \ n pipe \ n \ n
Все мои поиски выглядят так этот CommandText подходит, но это не так. Все, что я могу думать, это то, что он находится в другой схеме. Это проблема, или есть что-то еще, чего я не вижу?
Если вместо значения CommandText выше, у меня есть следующее вместо:
command.CommandText = "OtherSchema.P_CloseBatch('BatchName')";
Тогда ошибка или я получаю:
- $ исключение {"ORA-06550: строка 1, столбец 7: \ nPLS-00801: внутренняя ошибка [22503] \ nORA-06550: строка 1, столбец 7: \ nPL / SQL: оператор игнорируется "} Oracle .ManagedDataAccess.Client.OracleException
Я могу разделить его так, чтобы текст команды был отдельным, а имя пакета добавляется в качестве параметра:
connection.Open();
OracleCommand command = new OracleCommand();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "OtherSchema.P_CloseBatch(:batchname)";
String parameterBatchName = "BatchName";
command.Parameters.Add(new OracleParameter(":batchname", parameterBatchName ));
command.ExecuteNonQuery();
connection.Close();
И эта ошибка "+ $ исключение {" ORA-01008: не все переменные связаны "} Oracle .ManagedDataAccess.Client.OracleException"
Это похоже на очень простую ошибку. Я использую тот же синтаксис, что и запросы, которые работают, но они являются обновлениями, а не вызовами процедуры.