暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将查询结果存储在变量中,并在另一个查询中使用

askTom 2017-08-15
707

问题描述

我正在尝试将查询的结果存储在变量中,然后在另一个查询中使用该值。如果我选择所有并点击f5,下面的简化脚本就可以工作。但是,结果会转到脚本输出屏幕。如果我选择all并运行语句以获取查询结果 (我想导出数据),则不会传递变量中的值。

VARIABLE v_name number;
BEGIN 
  SELECT count(*) 
      INTO :v_name 
    FROM table;
END;
/

SELECT ID,
:v_name
FROM table
复制


谢谢。

专家解答

所以我猜你使用的是SQL Developer?

如果要使用 “run语句”,则必须在运行时传递bind值。所以你需要记下它,然后自己传递。

或者,您可以将整个内容作为脚本运行,并使用假脱机将输出发送到文件:

create table t as 
  select rownum id from dual
  connect by level <= 10;
VARIABLE v_name number;
BEGIN 
  SELECT count(*) 
      INTO :v_name 
    FROM T;
END;
/

spool out.log
SELECT ID, :v_name
FROM   T;
spool off
复制


Out.log将保存您的查询结果。

当然,这里真正的问题是:

你为什么需要两个陈述?

在几乎所有情况下,您都可以将它们合并为一个查询。在标量子查询中或通过连接。例如,在这里你可以做:

SELECT ID, (SELECT count(*) FROM T) ct
FROM   T;

ID  CT  
1   10  
2   10  
3   10  
4   10  
5   10  
6   10  
7   10  
8   10  
9   10  
10  10 
复制


或者,更好的是,如果你只是想要的计数,你甚至不需要第二个查询。使用count(*) 超过 (),你会得到总计:

SELECT ID, count(*) over () ct
FROM   T;

ID  CT  
1   10  
2   10  
3   10  
4   10  
5   10  
6   10  
7   10  
8   10  
9   10  
10  10 
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论