Использование хранимой функции SQL дает неверный оператор SQL - PullRequest
2 голосов
/ 14 ноября 2010

Я пытаюсь использовать хранимую функцию из базы данных Oracle Express в приложении c #.

OdbcCommand com = new OdbcCommand("SILNIA",sqlConn);
com.CommandType = CommandType.StoredProcedure;

OdbcParameter sqlParam = new OdbcParameter("@ReturnValue", OdbcType.Int);
sqlParam.Direction = ParameterDirection.ReturnValue;
com.Parameters.Add(sqlParam);
com.ExecuteNonQuery();

label1.Content = com.Parameters["@ReturnValue"].Value.ToString();

где определяется функция SILNIA (компилируется без ошибок):

create or replace
FUNCTION SILNIA RETURN NUMBER IS
w NUMBER := 1;
BEGIN
for i in 1..5 loop
w:=w*i;
end loop;

RETURN w;
END SILNIA;

В строке:

com.ExecuteNonQuery();

я получаю

ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00900: invalid SQL statement.

Но это работает без проблем:

OdbcCommand sqlCom = new OdbcCommand("SELECT SILNIA() FROM DUAL", sqlConn);
label1.Content = sqlCom.ExecuteScalar().ToString();

Ответы [ 2 ]

1 голос
/ 14 ноября 2010

Вы не можете использовать ExecuteNonQuery () для запуска SP.Вы должны сделать что-то еще - ExecuteScalar или ExecuteReader

Это потому, что ExecuteNonQuery () предназначен для работы только с операторами UPDATE, INSERT и DELETE.

0 голосов
/ 14 ноября 2010

Ваша функция не принимает параметров - попробуйте это:

SELECT SILNIA FROM DUAL
...