oracle存储过程连续执行结果不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程连续执行结果不同相关的知识,希望对你有一定的参考价值。

pl/sql里执行存储过程,f8执行后查看结果集,每次都累加.必须把窗口关闭重新测试.

这是pl/sql本来就这样的吗,还是我存储过程写的不对??
存储过程:

http://hi.baidu.com/sordhmbreabivzq/item/a1626cca2873c3ce994aa05b

存储过程是别人写的,我完全不懂,能帮我瞅一眼么??? 是不临时表没清空啥的啊?

楼主,再细心检查下,如果存储过程没有对表数据做修改,删除处理,最后得到的结果都一样。本身pl/sql这样执行存储过程是没有问题的。那个存储过程,是有insert这个插入处理的,会导致你数据一直在增加,增加完再查询所以出来的结果就一直增加且重复了。追问

麻烦帮忙看下,存储过程完全不懂,上面是连接,谢谢

追答

那个存储过程,是有insert这个插入处理的,会导致你数据一直在增加,增加完再查询所以出来的结果就一直增加且重复了。

那个存储过程,是有insert这个插入处理的,会导致你数据一直在增加,增加完再查询所以出来的结果就一直增加且重复了。

追问

但是 我该肿么办呢??

追答

你为嘛要怎么办呢?如果你只是要查询当前的数据,就去掉那段insert语句,主要是看你自己是什么样的需求,要做什么样的业务,就得按自己的逻辑去做程序。

参考技术A 这肯定不是PL/SQL的原因,具体是什么问题需要分析存储过程本身才知道。追问

麻烦帮忙看下,存储过程完全不懂,上面是连接

追答

很奇怪,这个存储过程应该是关掉窗口重新测试同样会累加的,除非你在另外执行了什么操作清空了J2131_Z_J213_R_TMP这个表。要做到在J213_R这个表不变的情况下每次执行存储过程的结果一样,需要在存储过程的最前面也就是begin之后,INSERT INTO J2131_Z_J213_R_TMP之前加一行:
truncate table J2131_Z_J213_R_TMP;

追问

是啊,J2131_Z_J213_R_TMP不是一张物理表么,我感觉也很奇怪. 你说的语法好像有点问题:

 begin

      truncate table J2131_Z_J213_R_TMP

INSERT INTO J2131_Z_J213_R_TMP(

pl/sql提示:

追答

少写了一个分号

本回答被提问者采纳
参考技术B 和plsql没什么关系,和你写的程序以及你要完成的功能有关系。追问

麻烦帮忙看下,存储过程完全不懂,上面是连接

oracle存储过程 中把临时表数据 返回结果集

在pl/sql 中 执行存储过程 返回 如上数据,能不能返回的是 这样的数据啊、怎样整

参考技术A 用索引表快一些,然后使用select * from table(存储过程名(参数列表....))输出。 参考技术B 利用游标cursor,然后用java代码,调用存储过程返回返回结果集(resultset)追问

存储过程中药返回结果集,必须用游标吗?

追答

应该不是吧,可能还可以用索引表吧,

参考技术C 你那个返回到哪?是个表吗?要是表结构一样,直接
insert into 表1 select * from 表2;

以上是关于oracle存储过程连续执行结果不同的主要内容,如果未能解决你的问题,请参考以下文章

oracle如何执行存储过程以及如何返回一个table

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

Oracle [存储过程] 执行动态拼接SQL语句并返回结果??

大家帮忙看看Oracle存储过程怎样给变量赋值

oracle 如何返回多条记录

oracle存储过程 中把临时表数据 返回结果集