当查询语句中in得参数非常多时,性能会下降,oracle可通过表变量得方式提升性能。假设现在有sql
SELECT A.FId “id”, A.FNumber "number"FROM t_ORG_ORG A WHERE A.FId IN (?,?..)
如果in里面的参数非常多时,可以使用表变量的形式,提升性能,那么sql变成了
SELECT A.FId “id”, A.FNumber “number” FROM t_ORG_ORG A
WHERE A.FId IN (SELECT COLUMN_VALUE FROM table(?))
Java在设置参数时可如下设置:
oracle.jdbc.OracleConnection ocon = con.unwrap(oracle.jdbc.OracleConnection.class);
oracle.sql.ArrayDescriptor des = oracle.sql.ArrayDescriptor.createDescriptor(“UDT_INTTABLE”, ocon);
stmt.unwrap(oracle.jdbc.OraclePreparedStatement.class).setARRAY(index, new oracle.sql.ARRAY(des, ocon, params));//params是个数组
而UDT_INTTABLE可通过CREATE OR REPLACE TYPE udt_inttable AS TABLE OF number(19);来创建。
oceanbase也想通过类似方式实现:
1.先创建类型CREATE OR REPLACE TYPE udt_inttable AS TABLE OF number(19);
2.语句为:
SELECT A.FId “id”, A.FNumber “number”
FROM t_ORG_ORG A
WHERE A.FId IN (SELECT COLUMN_VALUE FROM udt_inttable (?))
3.设置参数
OceanBaseConnection oceanBaseConnection = con.unwrap(OceanBaseConnection.class);
Array array = oceanBaseConnection.createArrayOf(“UDT_INTTABLE”,params);//params是个数组
stmt.unwrap(BasePrepareStatement.class).setArray(index,array);
但是却报错Caused by: java.sql.SQLException: ORA-00932: inconsistent datatypes。
请问oceanbase得表变量要如何实现?是否我的java代码设置参数有问题?