【问题标题】:ORA-06550 when trying to run stored procedure in oracle c#尝试在 oracle c# 中运行存储过程时出现 ORA-06550
【发布时间】:2016-10-19 19:15:01
【问题描述】:
 using (var command = new OracleCommand(sqlText, oraConnection) { CommandType = CommandType.StoredProcedure })
                {
                    command.BindByName = true;
                    var parameters = command.Parameters;
                    parameters.Clear();
                    parameters.Add("p_date", OracleDbType.Date, ParameterDirection.Input).Value = DateTime.Now;
                    command.ExecuteNonQuery();
                }

这是我在 VS15 中的代码。我正在尝试执行一个存储过程并将我唯一的参数作为日期传递。

create or replace procedure cwi_pat_deductions_export
(
       :p_date date
)
is

  v_count number;

这是存储过程的开始。我在第 1 列第 7 行收到 Oracle 错误:ORA-06550(就在“CREATE”一词之后)。我不是一个交易的 sql 开发人员,所以我很难看出错误在哪里。我不觉得它在我的一端(c#端)但它很可能是(我们的sql开发人员坚持认为它一定是我的问题,因为存储的proc在PlSql Developer中编译并运行良好)。

您不允许使用创建或替换来启动存储过程吗?我认为这是标准的。

【问题讨论】:

  • sqlText 的值是多少?您是在尝试调用存储过程还是创建它?
  • sqltex 是存储过程
  • 也使用 as 代替 is 对建议它的人不起作用(但我很欣赏尝试)
  • sqltext是存储过程名称还是存储过程的代码行数?
  • 如果您尝试执行存储过程 sqlText 应该只是存储过程名称 (cwi_pat_deductions_export) 而不是整个存储过程定义。

标签: c# sql oracle stored-procedures plsql


【解决方案1】:

当你想调用它时,你没有传递整个过程的CREATE OR REPLACE PROCEDURE ... 文本。 存储过程的意义在于它已经存储在数据库中。

如果要调用存储过程,sqlText 参数应该只是存储过程名称,cwi_pat_deductions_export。如果这不起作用,并且您收到 invalid identifier 错误,请尝试在名称前加上存储过程的所有者,例如 some_schema.cwi_pat_deductions_export

【讨论】:

  • 这似乎至少解决了这个问题。每天学习新东西。
  • 现在当我将 sqltext 更改为:
  • "CW.cwi_cwi_pat_deductions_export(:p_date)"
  • @JacobAlley:我写道'sqlText 参数应该只是存储过程名称'。存储过程需要多少参数(如果有)并不重要,sqlText 始终只是存储过程名称(如果需要,带有模式前缀)。您不要将参数名称放在sqlText 中。所以,坦率地说,当你做出改变时它不起作用,我并不感到惊讶。
  • 是的,我只是不确定如何将参数传递给存储过程,但它现在似乎工作正常......谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2018-06-12
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
相关资源
最近更新 更多