【问题标题】:How to use function to pass parameter to oracle stored procedure in c#如何在c#中使用函数将参数传递给oracle存储过程
【发布时间】:2018-11-02 07:12:51
【问题描述】:

我想将 HEX 字符串作为 参数 传递给 c# 程序中的 oracle 存储过程。存储过程以varchar2 作为输入参数。因此,我需要将 HEX 转换为 RAW,然后将 RAW 转换为 varchar2。思路如下代码所示。

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = 
  "call checking(utl_raw.cast_to_varchar2(hextoraw(:in_data)), :return_cde)";

cmd.Parameters.Add("in_data", 
                    OracleDbType.Varchar2, 
                    5000, 
                   "000102030405060708090A0B0C0D", 
                    ParameterDirection.Input);

cmd.Parameters.Add("return_cde", 
                    OracleDbType.Varchar2, 
                    8, 
                   "OK", 
                    ParameterDirection.InputOutput);

cmd.ExecuteNonQuery();

return_cde = cmd.Parameters["return_cde"].Value.ToString();

目前,此代码无法工作。谁能给我建议如何正确地做到这一点。

【问题讨论】:

    标签: c# oracle stored-procedures


    【解决方案1】:

    如果是 Oracle,请尝试使用 匿名块begin..end; 语法,而不是 call):

    //DONE: do not forget to dispose IDsiposable
    using (OracleCommand cmd = new OracleCommand()) {
      cmd.Connection = conn;
      cmd.CommandType = CommandType.Text; // redundant, can be dropped
    
      cmd.CommandText = 
        @"begin 
            checking(utl_raw.cast_to_varchar2(hextoraw(:in_data)), :return_cde);
          end";
    
      // 5000 - be careful - in SQL Oracle can operate with VarChar2 up to 4000;
      // in PL/SQL, however, the limit is 32000 
      cmd.Parameters.Add("in_data", 
                          OracleDbType.Varchar2, 
                          5000, 
                         "000102030405060708090A0B0C0D",
                          ParameterDirection.Input);
    
      cmd.Parameters.Add("return_cde", 
                          OracleDbType.Varchar2, 
                          8, 
                         "OK", 
                          ParameterDirection.InputOutput);
    
      cmd.ExecuteNonQuery();
    
      return_cde = cmd.Parameters["return_cde"].Value.ToString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 2013-10-24
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多