【问题标题】:Call a stored procedure with date parameter from C#从 C# 调用带有日期参数的存储过程
【发布时间】:2013-06-24 00:03:50
【问题描述】:

我想创建并运行一个带有 IN 参数的存储过程,该参数是一个日期。一旦日期传递到过程中,我想运行一个简单的选择语句将所有数据传输到目标表中。

假设源表和目标表完全相同,我使用的是:

CREATE OR REPLACE procedure Test ( start_date in data ) as

Begin

   insert into Destination_table (column 1 , column2, date_Column)
   Select column1, column 2, Date_column 
     from Source_table 
    Where date_column = Start_date;
Commit;
End Test;

已编辑...

CREATE OR REPLACE PROCEDURE Procedure_TEST ( s_date IN date ) AS
BEGIN

   INSERT INTO Ps_dest_table ( Name, Salary, STATEMENTDATE )
   SELECT Name, Salary, STATEMENTDATE 
     FROM ps_Source_table 
    WHERE (statementdate = s_date)                              

END procedure_TEST;

这是正确的做法吗?还是我错过了什么?如何从 C# 代码中调用它?

【问题讨论】:

  • 是的,这是正确的,但删除提交。事务控制应由调用者管理。有关 C# stackoverflow.com/questions/3940587/… 的示例,请参见此处
  • 我试过这个,但我得到源没有可运行的目标。当我运行这个 proc 时,程序也没有任何反应。示例目标表没有数据。
  • 那么,请用最正确的细节更新您的问题。您从 C# 收到此错误“源没有可运行的目标”?
  • 当我将过程作为脚本运行时,我在 SQL Developer 本身中收到此错误。用真实的程序编辑了问题
  • 您在插入末尾缺少分号:WHERE (statementdate = s_date);

标签: c# sql oracle stored-procedures oracle-sqldeveloper


【解决方案1】:

这看起来是正确的。不过,您的示例中的间距存在一些不一致之处。

insert into Destination_table (column 1 , column2, date_Column)

应该是:

insert into Destination_table (column1 , column2, date_Column)

Select column1, column 2, Date_column from Source_table 

应该是:

Select column1, column2, Date_column from Source_table 

您的实际查询是什么?

【讨论】:

    【解决方案2】:

    他们似乎回答了你关于程序的第一个问题。

    要从 .Net/C# 调用它,您可以使用 Oracle Data Provider .Net (ODP.Net),它是 Oracle 的免费 API,您可以找到它here

    【讨论】:

      【解决方案3】:

      解决了!问题不在于我如何编写存储过程。但是 SQLDeveloper 本身存在一个错误。当我创建存储过程并编译它时。它遵守但没有运行。我得到“源没有可运行的目标”。我只是关闭了应用程序并重新启动它,程序执行没有任何问题。所以,任何有同样问题的人。只是,重新启动应用程序可以解决您的程序编译未决的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 2015-01-07
        • 1970-01-01
        • 2020-11-11
        相关资源
        最近更新 更多