Ошибка вызова Oracle sp с .NET (PLS-00306) - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть очень простая хранимая процедура, как показано ниже:

create or replace procedure WF_ALI is
ali number;
begin
ali :=2;
end;

и код .NET, как показано ниже:

GetDatabaseConnection();
sqlString = "WF_ALI";
command = new OracleCommand(sqlString, connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.Add("ali", OracleType.Number);
command.Parameters["ali"].Value = 4;
int32 rowsAffected = command.ExecuteNonQuery;

Тем не менее, он возвращает ошибку

PLS-00306: wrong number or types of arguments in call to WF_ALI.

Я тоже попробовал это с жабой для Oracle. Когда я выполняю этот sp, он возвращает ту же ошибку.

Я могу подключиться к базе данных. С этим проблем нет. Я даже могу получить результат оператора SELECT. Пожалуйста, помогите.

1 Ответ

2 голосов
/ 21 апреля 2011

Ваша процедура не объявлена, чтобы принимать какие-либо параметры, поэтому вы не можете передать число. Если вы хотите передать параметр ali, объявление вашей процедуры должно быть что-то вроде

CREATE OR REPLACE PROCEDURE wf_ali( ali IN NUMBER )
IS
BEGIN
  <<do something>>
END;

Если вы хотите передать и изменить параметр, вам нужно объявить его как IN OUT, а не IN

CREATE OR REPLACE PROCEDURE wf_ali( ali IN OUT NUMBER )
IS
BEGIN
  ali := 2;
END;

Как правило, рекомендуется добавлять префиксы к именам параметров, чтобы не было риска того, что имя параметра будет конфликтовать со столбцом в таблице, т. Е.

CREATE OR REPLACE PROCEDURE wf_ali( p_ali IN OUT NUMBER )
IS
BEGIN
  p_ali := 2;
END;

Это, конечно, потребует, чтобы вы изменили имя параметра в своем коде C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...