Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Trả về giá trị của biến sql từ bên trong Truy vấn Sql Oracle trở lại mã .NET

Bạn sẽ muốn sử dụng ODP.NET (Các thành phần truy cập dữ liệu Oracle của Oracle):

Dưới đây là một ví dụ về điều này. Lưu ý rằng trong ODP.NET, bạn có thể thiết lập hướng tham số (đầu vào, đầu ra đầu vào, đầu ra, giá trị trả về) để tương ứng với các tham số của thủ tục hoặc câu lệnh bạn đang chạy. Trong ví dụ này, tôi đang lấy một giá trị trả về, là một ID được tạo bởi db thông qua một trình tự và trình kích hoạt (nó được tạo tự động theo như ứng dụng .NET có liên quan):

int event_id = 0;
using (OracleConnection oraConn = new OracleConnection(connStr))
{
    string cmdText = @"insert into EVENT
        (EVENT_NAME, EVENT_DESC)
        values
        (:EVENT_NAME, :EVENT_DESC)
        RETURNING EVENT_ID INTO :EVENT_ID
        ";

    using (OracleCommand cmd = new OracleCommand(cmdText, oraConn))
    {
        oraConn.Open();
        OracleTransaction trans = oraConn.BeginTransaction();
        try
        {
            OracleParameter prm = new OracleParameter();
            cmd.BindByName = true;
            prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); 
            prm.Value = "SOME NAME"; cmd.Parameters.Add(prm);

            prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); 
            prm.Value = "SOME DESC"; cmd.Parameters.Add(prm);

            prm = new OracleParameter( "EVENT_ID"
                                     , OracleDbType.Int32
                                     , ParameterDirection.ReturnValue); 
            cmd.Parameters.Add(prm);

            cmd.ExecuteNonQuery();
            trans.Commit();
            // return value
            event_id = ConvertFromDB<int>(cmd.Parameters["EVENT_ID"].Value);
        }
        catch
        {
            trans.Rollback();
            throw;
        }
        finally
        {
            trans.Dispose();
        }
        oraConn.Close();
    }
} 

ConvertFromDB chỉ là một giá trị chung để truyền giá trị trả về tương đương .NET của nó (trong trường hợp này là một số nguyên).

Hy vọng điều đó sẽ hữu ích.

CHỈNH SỬA:

Bạn có thể dễ dàng liên kết một mảng giá trị (và truy xuất một mảng giá trị trả về) trong ODP.NET:

using (OracleConnection oraConn = new OracleConnection(connStr))
{
    string cmdText = @"insert into TEST_EVENT
        (EVENT_NAME, EVENT_DESC)
        values
        (:EVENT_NAME, :EVENT_DESC)
        RETURNING EVENT_ID INTO :EVENT_ID
        ";

    using (OracleCommand cmd = new OracleCommand(cmdText, oraConn))
    {
        oraConn.Open();
        OracleTransaction trans = oraConn.BeginTransaction();
        try
        {
            string[] event_names = new string[2];
            string[] event_descs = new string[2];
            int[] event_ids = new int[2];

            event_names[0] = "Event1";
            event_descs[0] = "Desc1";

            event_names[1] = "Event2";
            event_descs[1] = "Desc2";

            OracleParameter prm = new OracleParameter();
            cmd.Parameters.Clear();
            cmd.ArrayBindCount = 2;
            cmd.BindByName = true;

            prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2); 
            prm.Value = event_names; cmd.Parameters.Add(prm);

            prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2); 
            prm.Value = event_descs; cmd.Parameters.Add(prm);

            prm = new OracleParameter( "EVENT_ID"
                                     , OracleDbType.Int32
                                     , ParameterDirection.ReturnValue); 
            cmd.Parameters.Add(prm);


            cmd.ExecuteNonQuery();
            trans.Commit();
            // get return values

            event_ids = (int[])(cmd.Parameters["EVENT_ID"].Value);
        }
        catch
        {
            trans.Rollback();
            throw;
        }
        finally
        {
            trans.Dispose();
        }
        oraConn.Close();
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách chèn khóa ngoại vào bảng

  2. DML và Xử lý ngoại lệ - Oracle

  3. Tương thích oci8, php7 và Oracle 10.1

  4. Lỗi SQL 'Không tìm thấy khóa chính' cho các khóa nước ngoài được sử dụng không đúng cách?

  5. Làm thế nào để tìm ra khi một bảng Oracle được cập nhật lần cuối cùng