怪异问题!sql在pl/sql中执行结果与java jdbc执行结果不一致

问题描述

做一查询系统(struts2+myeclipse+tomcat+oracle9),一般先在pl/sql中测试sql语句,无问题后在action中使用oracle thin模式连接数据库,执行sql语句,然后将查询结果存入HashMap后输出至jsp页面。出现如下怪异问题:1、在pl/sql中测试sql语句时结果正常。结果中有6个字段,其中两个字段为count()函数统计出的数值。2、将在pl/sql中测试过的sql语句写入struts2的action中,通过jdbc thin模式执行,查询结果与pl/sql中测试结果不一致。count()函数统计的那两个字段的值不一致,暂未发现规律。数值接近,互有高低。在struts2的action中执行sql语句前,先打印sql语句,打印语句与pl/sql中测试语句一样,查询结果一致。在action中执行sql语句后在将rs(RecordSet)存入HashMap前,输出rs内容,count()统计出的数值结果已经不一致。该系统中类似查询功能有几个,实现方式方法相同,唯独这个出现pl/sql和jdbc执行同一句sql结果后部分字段数值不一致的诡异情况!烦请大家帮助分析、支招!不胜感激!! 问题补充:lang_tu 写道

解决方案

pl/sql查询和jdbc查询,使用相同的排序方式...分析下结果不同之处,你也可以贴出来看看,帮你分析一下。
解决方案二:
我也碰到类似的问题了,在SQL Developer中执行sql和用Java JDBC执行结果不一样。后来查的原因是:我在SQL Developer中进行过insert,但没有手动commit,导致数据实际并未存储到数据库中。后来commit之后,就没问题了。SQL Developer不会自动commit,很不习惯!!
解决方案三:
type Exception report ??
解决方案四:
我也感到很奇怪,希望LZ解决后把解决方法贴出来,我看到你里面用rs = stmt.executeQuery(sql); 你换用preparedstatement来查询
解决方案五:
是不是pl/sql有事务没有提交?pl/sql内查询是同一个事务。而struts2的action中,通过jdbc thin模式执行不是同一事务,所以结果不一样
解决方案六:
是的一般以代码为准,有差别的话,pl/sql里面直接to_char 一把
解决方案七:
是挺奇怪的,关注一下,想说的都被上面兄弟说了
解决方案八:
印象中 count 统计出来的是个oracle int 类型.貌似转换到 java 的 Stirng 得仔细下.忘了.LZ仔细看看吧.
解决方案九:
找你们的DBA把 HOLD_CURSOR和 RELEASE_CURSOR两个参数重新设置一下。另外,硬件允许的话,再把ORACLE内存优化一下。
解决方案十:
引用java.sql.SQLException: ORA-01003: ?????????为什么后面是???????贴SQL语句
解决方案十一:
会不会是你pl/sql查询的table和jdbc查询的table根本不是一个table,但是是同名的,表空间不同。这个问题碰到过,纠结了很久,不知道能不能帮助你。
解决方案十二:
向HashMap里存值时,键相同的值会被覆盖,比如:Map map = new HashMap();map.put("1", "1");map.put("1", "211");System.out.println("长度="+map.size()" 值="+map.get("1"));打印结果:长度=1 值=211因此你jsp页面显示的值可能会比sql语句查询的少

时间: 2024-09-10 17:57:11

怪异问题!sql在pl/sql中执行结果与java jdbc执行结果不一致的相关文章

SQL,PL/SQL 数据类型一览表

The following is a list of datatypes available in Oracle. Character Datatypes The following are the Character Datatypes in Oracle: Data Type Syntax Oracle 9i Oracle 10g Oracle 11g Explanation(if applicable) char(size) Maximum size of 2000 bytes. Maxi

ORA-06502 assigning values from SQL to PL/SQL variables

    最近SQL查询返回的结果给PL/SQL变量出现ORA-06502错误.这个错误的描述是ORA-06502: PL/SQL: numeric or value error: character string buffer too small. 显而易见的是字符变量定义的长度不够,加到20,到100,继续06502,汗,咋回事呢? 1.问题描述 --出现问题是在一个package里,有两个参数游标,一个父游标,一个子游标,当父游标输出的结果传递值给子游标时提示值太大 --父游标原sql语句较

Oracle SQL和PL/SQL多表插入技巧

假如一个在线电子商务系统,我们现在需要根据订单表体现的消费金额将客户简单分为大中小三类并分别插入到三张表中. 订单表 order (order_id number, cust_id number, amount number); 小客户表 small_cust (cust_id number, tot_amt number); 中客户表 med_cust (cust_id number, tot_amt number); 大客户表 big_cust (cust_id number, tot_am

PL/SQL --> PL/SQL记录

--======================= -- PL/SQL --> PL/SQL记录 --=======================       PL/SQL记录有着类似于表的数据结构,是一个或多个字段且拥有数据类型的集合体.定义了PL/SQL记录类型之后,可以定义PL/SQL记录变 量.声明一个PL/SQL记录变量相当于定义了多个标量变量,简化了变量的声明,从而大大节省了内存资源.多用于简化单行多列的数据处理.     一.定义PL/SQL记录     1.直接定义PL/SQL

动态SQL和PL/SQL的EXECUTE IMMEDIATE选项

动态       EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上.    使用技巧   1. EXECUTE IMMEDIATE将不会提交一个DML事务

PL/SQL开发中动态SQL的使用方法

动态 内容摘要:在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的需求,比如需要动态建表或某个不确定的操作需要动态执行.这就需要使用动态SQL来实现.本文通过几个实例来详细的讲解动态SQL的使用. 本文适宜读者范围:Oracle初级,中级 系统环境: OS:windows 2000 Professional (英文版) Oracle:8.1.7.1.0 正文: 一般的PL/SQL程序设计中

oracel中sql语句和pl/sql语句使用绑定变量

关于绑定变量的用法: 之前的文章介绍了绑定变量对于系统的重要性,这里对绑定变量的使用做进一步的分析和说明. 1)在sql语句中如何带入bind value SQL> variable x number; SQL> exec :x:=100; PL/SQL procedure successfully completed. SQL> select * from t where id=:x; no rows selected SQL> exec :x:=101; SQL> sel

《Oracle PL/SQL程序设计(第5版)》一一2.6 在其他语言中调用PL/SQL

2.6 在其他语言中调用PL/SQL Oracle PL/SQL程序设计(第5版) 总有一天,你会在从C.Java.Perl.PHP或其他语言中调用PL/SQL.虽然这是一个很合理的需求,如果你曾经做过跨语言的开发工作,你一定熟知要把各种语言专有的数据类型糅合在一起─尤其是那些复合数据类型,比如数组.记录或者对象类型─的复杂性,更不用说不同的参数语法或者厂商对所谓"标准"应用编程接口(API)的扩展,比如微软的ODBC(Open Database Connectivity). 我会用几

PL/SQL --> 动态SQL调用包中函数或过程

      动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包其下的函数或过程,不能等同于DDL以及DML的调用,其方式稍有差异.如下见本文的描述.       有关动态SQL的描述,请参考:           PL/SQL --> 动态SQL           PL/SQL --> 动态SQL的常见错误   1.动态SQL调用包中过程不正确