Java 无论如何,如果您在此类列表中输入的值超过1000个,则Oracle 11g会抛出一个错误。除此之外,它工作得还不错。也许你可以举个例子?上面的链接已经失效了。 SELECT field FROM table WHERE value IN ('val1',

Java 无论如何,如果您在此类列表中输入的值超过1000个,则Oracle 11g会抛出一个错误。除此之外,它工作得还不错。也许你可以举个例子?上面的链接已经失效了。 SELECT field FROM table WHERE value IN ('val1', ,java,sql,oracle,optimization,query-optimization,Java,Sql,Oracle,Optimization,Query Optimization,无论如何,如果您在此类列表中输入的值超过1000个,则Oracle 11g会抛出一个错误。除此之外,它工作得还不错。也许你可以举个例子?上面的链接已经失效了。 SELECT field FROM table WHERE value IN ('val1', 'val2', 'val3', ... 'valn') SELECT field FROM table WHERE value IN SELECT somevalue from sometable select /*+ parallel


无论如何,如果您在此类列表中输入的值超过1000个,则Oracle 11g会抛出一个错误。除此之外,它工作得还不错。也许你可以举个例子?上面的链接已经失效了。
SELECT field
FROM table
WHERE value IN ('val1', 'val2', 'val3', ... 'valn')
SELECT field
FROM table
WHERE value IN SELECT somevalue from sometable
  select /*+ parallel(table) */ field ...
create table employees (id number(10) not null primary key, name varchar2(100) );

insert into employees 
select level l, 'MyName'||to_char(level) 
from dual connect by level <= 1e6;

1000000 rows created

commit;

exec dbms_stats.gather_schema_stats(USER, cascade=>TRUE);
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

    [OracleCustomTypeMappingAttribute("MDSYS.SDO_ELEM_INFO_ARRAY")]
    public class NumberArrayFactory : IOracleArrayTypeFactory
    {
      public Array CreateArray(int numElems)
      {
        return new Decimal[numElems];
      }

      public Array CreateStatusArray(int numElems)
      {
        return null;
      }
    }


    private void Test()
    {
      OracleConnectionStringBuilder b = new OracleConnectionStringBuilder();
      b.UserID = "sna";
      b.Password = "sna";
      b.DataSource = "ora11";
      using (OracleConnection conn = new OracleConnection(b.ToString()))
      {
        conn.Open();
        using (OracleCommand comm = conn.CreateCommand())
        {
          comm.CommandText =
              @" select  /*+ cardinality(tab 10) */ *  " +
              @" from employees, table(:1) tab " +
              @" where employees.id = tab.column_value";

          OracleParameter p = new OracleParameter();
          p.OracleDbType = OracleDbType.Array;
          p.Direction = ParameterDirection.Input;
          p.UdtTypeName = "MDSYS.SDO_ELEM_INFO_ARRAY";
          p.Value = new Decimal[] { 3, 4 };

          comm.Parameters.Add(p);

          int numPersons = 0;
          using (OracleDataReader reader = comm.ExecuteReader())
          {
            while (reader.Read())
            {
              MessageBox.Show("Name " + reader[1].ToString());
              numPersons++;
            }
          }
          conn.Close();
        }
      }
    }
static final int MAX_QUERY_SET = 1000;