【问题标题】:What is the best way to retrieve data from an oracle table using odp.net and pl/sql stored procedures?使用 odp.net 和 pl/sql 存储过程从 oracle 表中检索数据的最佳方法是什么?
【发布时间】:2011-03-08 04:26:35
【问题描述】:

我需要使用 pl/sql 存储过程和 odp.net 从 oracle 表中检索数据。这样做的标准方法是什么?

【问题讨论】:

    标签: c# oracle plsql oracle11g odp.net


    【解决方案1】:

    PL/SQL 能够使用 Ref Cursors(基本上是指针)返回数据集。这是一个基于部门返回员工子集的简单函数:

    SQL> create or replace function get_emps_by_dept (dno number)
      2      return sys_refcursor
      3  is
      4      rc sys_refcursor;
      5  begin
      6      open rc for select * from emp where deptno = dno;
      7      return rc;
      8  end;
      9  /
    
    Function created.
    
    SQL>
    

    以下是 SQL*Plus 中的 in 工作方式:

    SQL> var rc refcursor
    SQL> exec :rc := get_emps_by_dept(50)
    
    PL/SQL procedure successfully completed.
    
    SQL> print rc
    
         EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
          8085 TRICHLER   PLUMBER         8061 08-APR-10       3500                    50
          8060 VERREYNNE  PLUMBER         8061 08-APR-08       4000                    50
          8061 FEUERSTEIN PLUMBER         7839 27-FEB-10       4500                    50
          8100 PODER      PLUMBER         8061                 3750                    50
    
    SQL> 
    

    关于 .Net,在 Oracle.DataAccess.Types 中有一个 OracleRefCursor 类。需要一定数量的管道,但是优秀的 Mark A Williams 写了一篇关于这个主题的好文章,你可以在 the OTN site 找到。

    【讨论】:

    • 谢谢,这正是我之前想要的。自从写了这个问题后,我确实遇到了那篇文章!如果我想将记录转换为对象,这仍然是可行的方法(在我从数据读取器获取对象时转换对象)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2012-12-09
    相关资源
    最近更新 更多