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;