高分求救,关于minus的奇怪问题?

memgarden 2005-07-29 04:20:19
遇到一个非常奇怪的问题,我有一条关于minus的sql语句,语句如下
select COUNT(*) INTO N_COUNT FROM
(select table_name,column_name,data_type,data_length
from all_tab_cols
where owner='USER1_CHECK' AND TABLE_NAME='AC01'
MINUS
select table_name,column_name,data_type,data_length
from all_tab_cols
where owner='USER1' AND TABLE_NAME='AC01'),在pl/sql执行结果为0,但把这个语句放到存储过程中执行,结果为55,请问这到底是怎么回事,为什么会存在不同的结果,请各位大侠指教
...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2005-08-01
  • 打赏
  • 举报
回复
是不是没有commit?
如果一个会话 修改了表,而没有commit;其它会话 就不会查询到变化的部分。
memgarden 2005-08-01
  • 打赏
  • 举报
回复
我通过debug跟踪到N_COUNT 的值为55,这个和返回没什么关系,输出还是55
UandM 2005-07-29
  • 打赏
  • 举报
回复
呵呵,你的存储过程的n_count没有返回阿,
返回了你就得到你想要的数了
memgarden 2005-07-29
  • 打赏
  • 举报
回复
create or replace procedure ttt
is
N_COUNT NUMBER;
begin

select COUNT(*) INTO N_COUNT FROM
((select table_name,column_name,data_type,data_length
from all_tab_cols
where owner='USER1_CHECK' AND TABLE_NAME='AC01')
MINUS
(select table_name,column_name,data_type,data_length
from all_tab_cols
where owner='USER1' AND TABLE_NAME='AC01'));
end ttt;
存储过程如上,两种执行结果不一样
bzszp 2005-07-29
  • 打赏
  • 举报
回复
我试了一下没有问题,版本817,是不是你的程序有问题呢?
加上输出看看。

SQL> select count(*) from
2 (
3 select empno,job from emp
4 minus
5 select empno,job from emp where job='CLERK');

COUNT(*)
----------
10

已用时间: 00: 00: 00.20

SQL> set serveroutput on;
SQL> declare
2 v_out number;
3 begin
4 select count(*) into v_out from
5 (
6 select empno,job from emp
7 minus
8 select empno,job from emp where job='CLERK');
9 dbms_output.put_line(v_out);
10 end;
11 /
10

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.40
SQL>
njhart2003 2005-07-29
  • 打赏
  • 举报
回复
不会吧,把存储过程里的语句贴出来看看

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧