问题描述
我正在尝试将查询的结果存储在变量中,然后在另一个查询中使用该值。如果我选择所有并点击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值。所以你需要记下它,然后自己传递。
或者,您可以将整个内容作为脚本运行,并使用假脱机将输出发送到文件:
Out.log将保存您的查询结果。
当然,这里真正的问题是:
你为什么需要两个陈述?
在几乎所有情况下,您都可以将它们合并为一个查询。在标量子查询中或通过连接。例如,在这里你可以做:
或者,更好的是,如果你只是想要的计数,你甚至不需要第二个查询。使用count(*) 超过 (),你会得到总计:
如果要使用 “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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。