将列表/数组值传递给数据库并检索相关记录集

时间:2011-07-06 13:28:17

标签: c# oracle plsql

我正在开发一个与 Oracle 数据库通信的 C#应用程序。

在我的应用程序中,用户从列表中选择多个项目,并请求与这些所选项目相关的数据的报告/摘要。

我正在尝试将这些项ID的列表/数组传递给数据库,以根据它们过滤结果集。我已经可以选择在运行时构建我的查询,但如果存在,我宁愿使用更好的解决方案。

关于性能和灵活性的最佳方法是什么?

欣赏它。

3 个答案:

答案 0 :(得分:1)

您可以使用Linq To Sql执行此操作,但请注意,您将限制为2100的数组大小。

答案 1 :(得分:0)

如果您有权访问linq,我相信这会对您有所帮助。 http://www.albahari.com/nutshell/predicatebuilder.aspx

答案 2 :(得分:0)

我假设你需要帮助创建一个列表的程序(如果我错了,请纠正我)。从Oracle方面来说,您可以执行以下操作:

create or replace package my_package as
  ...
  type t_id_tab is table of my_table.id%type index by pls_integer;
  ...
  procedure do_work(i_ids in t_id_tab);
  ...
end my_package;

create or replace package body my_package as
...
procedure do_work(i_ids in t_id_tab, o_affected_cnt out number) is
 begin
  forall i in i_ids.first..i_ids.last

    -- do something useful here, for example

    insert into some_table(col1, col2, col3)
    select col1, col2, col3 from some_other_table
    where id = i_ids(i);

    o_affected_cnt := SQL%ROWCOUNT;

    commit;
 end;
end my_package;