ORA-00600: internal error code, arguments: [kcbz_check_objd_typ_1], [0], [0], [1], [], [], [], []
Current SQL statement for this session:
select * from tmp_hotelinfolisttest a where salesprice > 0 order by decode(a.hotel_comm_type,4,6,nvl(a.hotel_comm_type,5)),a.hotel
star,a.lowestprice ,a.hotelid,a.ROOM_TYPE_ID,a.CHILDROOMTYPEID,a.PAY_METHOD,a.able_sale_date,a.salesprice
存储过程简单调试了下没什么问题:从一些表里取到数据,先暂时放在tmp_hotelinfolisttest这个临时表里,最后用一个游标类型的返回参数返回给java,上面报错的sql就是游标所使用的sql.
代码截取如下:
.....
v_sqlstr := 'select * from tmp_hotelinfolisttest a where salesprice > 0 order by '|| v_tempstr;
open return_list for v_sqlstr;
--------
commit;
.........
把开发人员提供的输入参数传入,直接在sqlplus下调用,没错误,但用java调用就报错。
google metalink上search了一把,没发现和这个情景一模一样的案例。
据开发人员描述,这个存储过程和另一个包B里的同一存储过程相似,但B不存在这个问题。
仔细比对2个存储过程,没发现有特别之出,除了2个存储过程分别采用了2个不同的临时表.
比较2个临时表的区别,发现A包里用的临时表是on commit delete rows.而B包里的是on on commit preserve rows.
问题就在这里:
如果采用事务级的临时表,那么java在调用完存储过程以后(存储过程最后有commit),临时表里的数据会被delete掉,但是它拿到的那个游标返回参数却需要这些数据,这样就产生了冲突。
而如果采用会话级的临时表,由于java在调用完存储过程后,会话并未结束,数据会一直保存到会话结束为止,因此就不会有问题。
把临时表改成on commit preserve rows 问题解决。
还有3个疑问:
1 当返回一个游标类型的参数时,oracle返回的到底是一个指向sql的指针,还是一个指向数据的指针?
2 为什么在数据库直接调用该存储过程就不会报错?
是不是只有在真正要取游标里的数据时,oracle才会做校验?
还是在 open return_list for v_sqlstr做了校验 然后数据被delete,最后拿数据的时候再次校验的时候报错。
3 从报错误的字面上理解,kcbz_check_objd_typ_1应该是在做check object type
这个check究竟是在check哪个object type是游标的,还是临时表的,还是数据?
Current SQL statement for this session:
select * from tmp_hotelinfolisttest a where salesprice > 0 order by decode(a.hotel_comm_type,4,6,nvl(a.hotel_comm_type,5)),a.hotel
star,a.lowestprice ,a.hotelid,a.ROOM_TYPE_ID,a.CHILDROOMTYPEID,a.PAY_METHOD,a.able_sale_date,a.salesprice
存储过程简单调试了下没什么问题:从一些表里取到数据,先暂时放在tmp_hotelinfolisttest这个临时表里,最后用一个游标类型的返回参数返回给java,上面报错的sql就是游标所使用的sql.
代码截取如下:
.....
v_sqlstr := 'select * from tmp_hotelinfolisttest a where salesprice > 0 order by '|| v_tempstr;
open return_list for v_sqlstr;
--------
commit;
.........
把开发人员提供的输入参数传入,直接在sqlplus下调用,没错误,但用java调用就报错。
google metalink上search了一把,没发现和这个情景一模一样的案例。
据开发人员描述,这个存储过程和另一个包B里的同一存储过程相似,但B不存在这个问题。
仔细比对2个存储过程,没发现有特别之出,除了2个存储过程分别采用了2个不同的临时表.
比较2个临时表的区别,发现A包里用的临时表是on commit delete rows.而B包里的是on on commit preserve rows.
问题就在这里:
如果采用事务级的临时表,那么java在调用完存储过程以后(存储过程最后有commit),临时表里的数据会被delete掉,但是它拿到的那个游标返回参数却需要这些数据,这样就产生了冲突。
而如果采用会话级的临时表,由于java在调用完存储过程后,会话并未结束,数据会一直保存到会话结束为止,因此就不会有问题。
把临时表改成on commit preserve rows 问题解决。
还有3个疑问:
1 当返回一个游标类型的参数时,oracle返回的到底是一个指向sql的指针,还是一个指向数据的指针?
2 为什么在数据库直接调用该存储过程就不会报错?
是不是只有在真正要取游标里的数据时,oracle才会做校验?
还是在 open return_list for v_sqlstr做了校验 然后数据被delete,最后拿数据的时候再次校验的时候报错。
3 从报错误的字面上理解,kcbz_check_objd_typ_1应该是在做check object type
这个check究竟是在check哪个object type是游标的,还是临时表的,还是数据?
发表评论
-
查看当前Session SQL
2014-07-08 11:51 1092SELECT (SELECT listagg(b.sql_te ... -
CLOB列 XML信息查看
2014-05-28 10:28 1028--使用该SQL查询节点情况 SELECT * FROM ... -
【转】ORACLE 临时表空间使用率过高的原因及解决方案
2012-12-25 15:24 1022http://www.cnblogs.com/wonder31 ... -
oracle:获取session的IP地址
2012-10-20 02:38 4311方法1 创建触发器: create orreplace ... -
Oracle ora-01002
2012-08-11 02:43 28957ORA-01002:fetch超出序列 ... -
提高Oracle SQL的执行效率的3个方案
2012-08-08 00:57 1005如果你想要提高Oracle SQL ... -
Oracle STA
2012-08-06 11:32 0第一步:创建优化任务 ... -
Oracle SQL小技巧
2012-08-06 11:21 01.两个字段可空的判断相等,用decode判断。 例子:d ... -
自动工作负载库(Automatic Workload Repository,AWR)
2012-07-23 22:45 1430自动工作负载库(Automatic Workload Repo ... -
orace的隔离级别
2012-07-21 01:06 1107隔离级别(isoation eve) 隔离级别定义了事务与 ... -
Oracle SQLID 与 Hash_value 之间的相互转化
2012-07-20 00:55 4720一、什么是SQLID SQLID是根据SQL 文本,经过 ... -
Oracle优化器和索引原
2012-07-13 00:34 1283Oracle优化器和索引原理 ============ ... -
Oracle优化器的RBO和CBO方式
2012-07-13 00:25 2405[/size]Or[size=large][size=smal ... -
Oracle 优化器详解
2012-07-13 00:18 1357一、优化器基本知识 Oracle在执行一个SQL之前,首先 ... -
SQL中使用WITH AS提高性能
2012-07-05 23:30 1256摘要:本文结合笔者实 ... -
Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
2012-07-01 23:46 2139最近开始接触Oracle了,接触的越多越感受到自己的渺小!(o ... -
Oracle表连接操作——Hash Join(哈希连接
2012-05-20 17:05 0连接 http://space.itpub.net/?uid ... -
Oracle hash join
2012-05-20 17:00 956hash join是oracle里面一个 ... -
转--一次HASH JOIN 临时表空间不足的分析和优化思路
2012-05-20 15:36 4558最近遇到一个语句, 只要一执行这个语句就会出现报错临时表空间 ... -
SQL*PLUS SET 变量
2012-05-02 22:46 882SQL*PLUS SET变量 SQL*PLUS维护系 ...
相关推荐
需要注意的是,在Oracle 11g的文档中找到了对于这一参数的引用,表明它是在Oracle 11g版本中引入的新特性。 总结上述解决方法,面对从Oracle 10g到Oracle 11g的数据库链接认证问题,解决方案集中在密码认证的细节上...
### Oracle报错详细列表解析 #### ORA-00001: 违反唯一约束条件 当尝试向具有唯一约束的列插入重复值时触发。例如,在唯一索引或主键约束上。 #### ORA-00017: 请求会话以设置跟踪事件 该错误通常出现在调试过程中...
错误码ORA-00904表示尝试引用一个不存在的列,这通常是由于列名输入错误导致的。应检查列名的正确性,包括大小写和拼写。 错误码ORA-01408提示已有相同顺序的列集合被索引,这意味着试图创建的索引与现有索引结构...
八、会话引用进程私用内存(ORA-00023) ORA-00023 错误表示会话引用进程私用内存。当用户尝试引用进程私用内存时,Oracle 数据库将检查是否符合条件,如果不符合,则返回 ORA-00023 错误。 九、超出最大递归 SQL ...
ora-32035的具体错误信息是:“未引用在with子句中定义的查询名。至少一个with查询的name未被引用。”这意味着至少有一个在`WITH`子句中创建的临时表没有在随后的查询中使用。 CTE是一种非常有用的构造,它允许你在...
表明试图引用一个不存在的列名。检查SQL语句中的列名拼写,确保它们与表中的实际列名一致。 七、ORA-01652:无法扩展临时表空间 当执行操作需要大量临时空间,而当前分配的临时表空间不足时,会出现此错误。解决...
* ORA-00023: 会话引用进程私用内存;无法分离会话: 这个错误通常发生在尝试分离会话时。 * ORA-00024: 单一进程模式下不允许从多个进程注册: 这个错误通常发生在尝试注册多个进程时。 * ORA-00025: 无法分配 ORA-...
总结起来,解决Oracle的`Package`访问其他`Schema`的表报错`ORA-00942`的方法主要包括验证对象存在性、进行适当授权、创建同义词(公共或私有)以及重新编译`Package`。确保遵循这些步骤,并始终在操作数据库时谨慎...
#### ORA-00023: 会话引用进程私用内存;无法分离会话 如果一个会话试图脱离与其相关的私有内存空间(例如,当尝试在共享服务器环境中将会话转换为专用服务器模式时),则会引发此错误。确保会话的配置允许此类转换...
当Tomcat在运行过程中遇到问题,如在执行SQL语句时抛出“ORA-00903: 无效表名”的错误,这通常意味着在应用程序中引用了一个不存在的表。解决此类问题需要有效的调试工具和方法。本文将详细介绍如何利用Oracle的...
ORA-00023错误表示会话引用了进程私有内存,导致会话无法分离。这可能是在尝试关闭会话时,数据库检测到会话与特定进程的内存分配有关联。 对于ORA-00024错误,它表明在单一进程模式下,不允许从多个进程注册。这...
此错误意味着你试图删除的行被其他表中的记录引用,导致数据的一致性受到影响。Oracle设计这种机制是为了保护数据库的完整性,防止意外的数据丢失或破坏。 ORA-02292错误的具体信息通常会包含违反的约束名称,这有...
- **外键**:确保引用完整性。 #### 七、表结构修改 **12. 在不影响子表的情况下重建母表** - 关闭子表的外键约束。 - 重建母表。 - 重新激活子表的外键约束。 #### 八、归档模式与非归档模式 **13. 归档模式与...
- 外键约束(`Foreign Key`):确保引用的完整性,使得表之间能建立起参照关系。 #### 12. 如何在不影响子表的前提下,重建一个母表? - 首先使子表的外键约束失效,然后重建母表,最后重新激活外键约束。 #### 13....
查看数据库引擎的报错 - 使用`SELECT * FROM v$diag_info`查看诊断信息的位置。 - 使用`SELECT * FROM v$database`和`v$instance`查看实例级的错误信息。 - 使用`DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_...
引用DBLINK,可以在SQL语句中直接使用,如: ```sql SELECT * FROM worker@zrhs_link; ``` 为方便使用,可以创建同义词或远程视图: ```sql CREATE SYNONYM worker_syn FOR worker@zrhs_link; CREATE VIEW worker AS...