ORA-06550: строка 1, столбец 37: PLS-00201: идентификатор "XYZ" должен быть объявлен

Когда я пытаюсь получить доступ и освободить процедуру хранения через следующий код С# Вот мой код С#

OracleParameter op = null;
 OracleDataReader dr = null;

 OracleCommand cmd = new OracleCommand();

 cmd.CommandText = "pkg_prov_index.getNextPanel";
 cmd.CommandType = CommandType.StoredProcedure;


 op = new OracleParameter("pCurrentPanelId", OracleDbType.Int32);
 op.Direction = ParameterDirection.Input;
 op.Value = masterProviderIndex.CurrentPanelId;
 cmd.Parameters.Add(op);
 op = new OracleParameter("pRefCursor", OracleDbType.RefCursor);
 op.Direction = ParameterDirection.inputOutput;
 cmd.Parameters.Add(op);
 dr =cmd.ExecuteReader(); Here , it gives me an error that says ORA-06550: line 1, column 37: PLS-00201: identifier 'XYZ' must be declared at 
 if(dr.HasRows)
 {while(dr.Read())
 {
 }
 }

У меня есть права доступа и выполнения хранимой процедуры, поэтому никаких проблем с этим. И когда я открыл и увидел хранимую процедуру в Sql Developer, у нее есть курсор ввода и вывода (курсор ввода для чтения так много столбцов, что SP - это просто ничего, кроме выражения select вместе с предложением where в представлении, которое записывается с участием 5 таблиц вместе, а затем вывод курсора для записи выходного результата этого SP). Я понимаю, что мое понимание курсора... Поскольку я - парень.Net, не эксперт оракула. Теперь вернемся к самому важному вопросу. Если вы, ребята, смотрите на мой код для ввода/вывода курсора, все, что я получаю, это oracledbtype.refcursor в перечислении С# для oracledbtype, но oracle SP использует курсор ввода/вывода, является ли это корнем моей ошибки, потому что я отправляю параметр ввода/вывода как refcursor, тогда как oracle SP имеет курсор ввода/вывода, а не refcursor, но refcursor - это все, что я получаю при написании кода с использованием С#. Ваша помощь будет высоко оценена. Благодарю.

1 ответ

Перед CommandText Вы должны попытаться CommandText имя процедуры следующим образом:

OracleCommand cmd = new OracleCommand("getNextPanel", _conn);

Параметр OracleParameter должен точно соответствовать имени параметра (а не только типу), когда вы вызываете его по CommandType.StoredProcedure

Почему есть cmd.Parameters.Add(op); дважды? Кроме того, op.Direction = ParameterDirection.inputOutput; буква "i" должна быть в верхней части (вероятно, опечатка).

Вышеуказанные шаги взяты из рабочего примера, который я разработал, выполнив следующие шаги: Вызов хранимой процедуры Oracle из С#?

licensed under cc by-sa 3.0 with attribution.