‘壹’ oracle失效的索引要怎么查看
看 user_indexes 的 status 字段, 如果不是 valid, 索引失效。
‘贰’ Oracle 定义存储过程 不能执行,处于无效状态。
无效状态有两种可能:
1、一种是你的存储过程编辑没有成功,创建了,但里面有语法错误。
‘叁’ Java中从Oracle里取出数据时,为什么提示“无效的列索引”
是不是取出数据并操作时出现的?看下有没有作数据为空的检查或看下使用的列是不是正确。一般是先检查取出的数据是不是为空,不为空才进行循环输出之类的处理,此时如果是空的进行操作会出现这个错误。
‘肆’ JAVA 调用存储过程报错 java.sql.SQLException: 无效的列索引
游标参数在哪一位登记的就在哪一位取,
call.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR); //在第4个登记
ResultSet rs = (ResultSet) call.getObject(4); //在第4个取
‘伍’ 如何查找oracle中失效的索引
看 user_indexes 的 status 字段, 如果不是 valid, 索引失效。 在使用分区表情况下,可能出现索引失效。 如果索引失效,需要重建索引。
‘陆’ oracle索引什么时候失效
容易引起oracle索引失效的原因很多:
1、在索引列上使用函数。如SUBSTR,DECODE,INSTR等,对索引列进行运算.需要建立函数索引就可以解决了。
2、新建的表还没来得及生成统计信息,分析一下就好了
3、基于cost的成本分析,访问的表过小,使用全表扫描的消耗小于使用索引。
4、使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,一般大于5%-15%就不走索引而走FTS。
5、单独的>、<。
6、like "%_" 百分号在前。
7、单独引用复合索引里非第一位置的索引列。
8、字符型字段为数字时在where条件里不添加引号。
9、当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10、索引失效,可以考虑重建索引,rebuild online。
11、B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走、联合索引 is not null 只要在建立的索引列(不分先后)都会走。
‘柒’ oracle存储过程 处于无效状态
1、你的存储过程有错误,编译不通过。处理于无效状态。
2、问题
存储过程中隐式游标的select语句必须要有into子句。
而select*fromtemp_syckzl_zy这是一个没有意义的语句;
应改为如:selectcol1intov_col1fromtemp_syckzl_zy;
注:col1为表中一字段,v_col1为一变量
‘捌’ java连接oracle数据库java.sql.SQLException:无效的列索引问题
java.sql.SQLException: 无效的列索引
无效的列索引
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
atoracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5328)
atoracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5320)
at untitled5.addreader1.validID(addreader1.java:128)
at untitled5.addreader1.jButton1_actionPerformed(addreader1.java:97)
at untitled5.addreader1_jButton1_actionAdapter.actionPerformed(addreader1.java:175)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
代码:String driverName = "oracle.jdbc.OracleDriver";
Driver driver = (Driver) Class.forName(driverName).newInstance();
//连接数据库
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@LONG:1521:orcl", "sysman", "tongfang");
PreparedStatement pstmt = con.prepareStatement(
" insert into reader values(?)");
pstmt.setString(1, str1);
pstmt.setString(2,str2);
pstmt.setString(3,str3);
pstmt.setString(4,str4);
ResultSet res = pstmt.executeQuery();
‘玖’ java连接oracle数据库java.sql.SQLException: 无效的列索引问题
这和用什么用户无关,只要能连上数据库、并且使用的用户对该表有插入权限,就没问题。现在出现的“无效的列索引的异常”,是指在语句pstmt.setString(2,str2);中,列索引2是无效的,因为sql语句中只有一个问号。PreparedStatement 对象中的
setString方法的第一个参数是列索引,这个参数的取值范围是和sql语句中的问号数量对应的,sql语句中有n个问号,setString方法的第一个参数就应该从1到n,如果不在这个范围之内,就会出列索引无效的异常。