El uso de la function SQL almacenada proporciona una statement SQL no válida

Estoy tratando de usar la function almacenada de la database Oracle Express en la aplicación c #.

OdbcCommand com = new OdbcCommand("SILNIA",sqlConn); com.CommandType = CommandType.StonetworkingProcedure; OdbcParameter sqlParam = new OdbcParameter("@ReturnValue", OdbcType.Int); sqlParam.Direction = ParameterDirection.ReturnValue; com.Parameters.Add(sqlParam); com.ExecuteNonQuery(); label1.Content = com.Parameters["@ReturnValue"].Value.ToString(); 

donde se define la function SILNIA (comstack sin errores):

 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; 

En línea:

 com.ExecuteNonQuery(); 

yo obtengo

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

Pero esto funciona sin problemas:

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

No puede usar ExecuteNonQuery () para ejecutar un SP. Tienes que hacer otra cosa: ExecuteScalar o ExecuteReader

Esto se debe a que ExecuteNonQuery () está diseñado para funcionar solo con las instrucciones UPDATE, INSERT y DELETE.

Su function no acepta parameters – intente esto:

 SELECT SILNIA FROM DUAL