【问题标题】:Call Oracle Function From .NET As Stored Procedure从 .NET 调用 Oracle 函数作为存储过程
【发布时间】:2013-06-06 05:55:15
【问题描述】:

我编写了一个简单的 Oracle 函数,称为测试,没有返回字符串的参数。当我尝试从我的 .NET 应用程序中调用它时,出现错误:

System.Data.OracleClient.OracleException:

ORA-06550:第 1 行,第 1 列 7:" "PLS-00221: 'TESTING2' 不是过程或未定义"。

当我将其更改为“从双重选择测试()”并将 CommandType 更改为文本时,它可以工作。我错过了什么?

Dim oracleConn As OracleConnection = CreateConnection(<connection info here>)

    Dim oracleCmd As New OracleCommand()
    oracleCmd.Connection = oracleConn
    'oracleCmd.CommandText = "SELECT TESTING2() FROM DUAL" 'this works
    oracleCmd.CommandText = "TESTING2"   'this does not work

    oracleCmd.CommandType = CommandType.StoredProcedure

    'oracleCmd.ExecuteReader()  'also tried this
    Dim tmpVar As String = oracleCmd.ExecuteScalar()

create or replace FUNCTION testing2
RETURN VARCHAR2
AS      
begin
  return 'hello';
end;

【问题讨论】:

  • 您是否已为您用于登录 oracle 服务器的用户授予对该存储过程的执行权限?你在包中定义了一个存储过程吗?
  • 我确实为分配给我的用户的所有角色执行了授权。我也尝试将该函数作为包的一部分调用,但同样的错误。

标签: asp.net vb.net oracle stored-procedures plsql


【解决方案1】:

我不再使用 Oracle,所以我现在无法测试它,但你告诉我这个例子是否有效

Dim oracleConn As OracleConnection = CreateConnection(<connection info here>)
Dim oracleCmd As New OracleCommand()
oracleCmd.Connection = oracleConn
oracleCmd.CommandText = "TESTING2"   
oracleCmd.CommandType = CommandType.StoredProcedure
Dim prm = new OracleParameter("returnvalue", OracleType.VarChar)
prm.Size = 1024
prm.Direction = ParameterDirection.ReturnValue
oracleCmd.Parameters.Add(prm)
oracleCmd.ExecuteNonQuery()

Console.WriteLine(prm.Value.ToString)

顺便说一句,我想 CreateConnection 返回一个 OPEN 连接对吗?

【讨论】:

  • 谢谢!为返回值设置一个 Oracle 参数并调用 ExecuteNonQuery 就可以了!
猜你喜欢
  • 1970-01-01
  • 2011-12-05
  • 2011-04-25
  • 2015-05-22
  • 2012-01-27
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多