OracleHelper: Как прочитать данные из параметра SProc Oracle OUT SYS_REFCURSOR в набор данных?

Я получаю следующую ошибку, когда пытаюсь передать результат из процедуры хранилища в набор данных. Класс OracleHelper похож на SqlHelper, просто он ссылается на Oracle.

Я использую управляемый драйвер ODP.NET.

У меня есть образцы данных в таблице СЧЕТОВ.

Ошибка:

ORA-06550: line 1, column 7:

PLS-00306: wrong number or types of arguments in call to 'GET_ACCOUNT_DETAILSV2'

ORA-06550: line 1, column 7:

C#:

public DataSet GetUserData(string PHONE_NUMBER)
    {
        return (DataSet)OracleHelper.ExecuteDataset(GetConnectionString(), "GET_ACCOUNT_DETAILSV2", PHONE_NUMBER);); 
    }

Процедура магазина:

CREATE OR REPLACE PROCEDURE GET_ACCOUNT_DETAILSV2 (
   PHONE_NUMBER   IN ACCOUNTS.PHONE%TYPE,
   o_rc     OUT         SYS_REFCURSOR)
IS
BEGIN
      OPEN o_rc FOR
         SELECT ID,
                STATUS,
                EMAIL
           FROM ACCOUNTS
          WHERE PHONE = PHONE_NUMBER;
END GET_ACCOUNT_DETAILSV2;
/

Любая помощь будет оценена.

1 ответ

Что-то вроде того:

        using (OracleConnection conn = new OracleConnection("User Id=marketing;Password=SECRET;Data Source=dashworks-db"))
        {
            conn.Open();
            using (OracleCommand cmd = new OracleCommand("GET_ACCOUNT_DETAILSV2", conn))
            {
                cmd.BindByName = true;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("PHONE_NUMBER", "416-123-4567");
                cmd.Parameters.Add("o_rc", OracleDbType.RefCursor, ParameterDirection.Output);
                using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
                {
                    DataSet ds = new DataSet("result");
                    ds.Locale = CultureInfo.InvariantCulture;
                    adapter.Fill(ds);
                }
            }
        }
Другие вопросы по тегам