Как использовать функцию для передачи параметра в хранимую процедуру оракула в C # - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу передать строку HEX в качестве параметра в хранимую процедуру Oracle в программе c #. Хранимая процедура принимает 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();

В данный момент этот код не может работать . Может ли кто-нибудь дать мне предложение о том, как я могу сделать это правильно.

1 Ответ

0 голосов
/ 02 ноября 2018

В случае 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...