【问题标题】:Using SQL stored function gives invalid SQL statement使用 SQL 存储函数给出无效的 SQL 语句
【发布时间】:2011-05-09 15:59:05
【问题描述】:

我正在尝试在 c# 应用程序中使用 Oracle Express 数据库中的存储函数。

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();

【问题讨论】:

    标签: c# sql oracle odbc ora-00900


    【解决方案1】:

    您不能使用 ExecuteNonQuery() 来运行 SP。你必须做其他事情——ExecuteScalar 或 ExecuteReader

    这是因为 ExecuteNonQuery() 设计为仅适用于 UPDATE、INSERT 和 DELETE 语句。

    【讨论】:

    • 我都试过了 OdbcDataReader r = com.ExecuteReader();和 label1.Content = (string)com.ExecuteScalar();而不是 com.ExecuteNonQuery();并发生同样的错误。
    • 您确定不能为 SP 运行 ExecuteNonQuery()?我相当有信心你可以称之为......
    【解决方案2】:

    您的函数不接受任何参数 - 试试这个:

    SELECT SILNIA FROM DUAL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多