如何解决如果计数列,则在Oracle中选择
我可以在oracle中做类似的事情吗? 我想检查结果数据集是否超过20k记录,然后不要选择,如果少于20k,则选择。
DECLARE cnt number;
BEGIN
select count(*) into cnt from ir_mpn where material LIKE '%A00%';
IF cnt > 20000 THEN
select manuf_part,material,vendor,vendor_name from ir_mpn where material LIKE '%A00%';
END IF;
END;
ORA-06550: line 6,column 4:
PLS-00428: an INTO clause is expected in this SELECT statement
有什么更好的建议吗?
解决方法
这是PL / SQL,因此您的SELECT
语句需要一个INTO
子句。由于您将要返回数千行,因此无法将它们返回到标量变量中,例如收集或引用光标。
但是,如果您想用SQL进行操作,那么看看是否有帮助;示例基于Scott的DEPT
表:
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------------- --------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
如果行数少于3,我想从中选择行;由于行数为4,因此不会返回任何内容:
SQL> select * from dept
2 where 3 >= (select count(*) from dept);
no rows selected
5行怎么样?
SQL> select * from dept
2 where 5 >= (select count(*) from dept);
DEPTNO DNAME LOC
---------- -------------------- --------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
在您的情况下:
select manuf_part,material,vendor,vendor_name
from ir_mpn
where material LIKE '%A00%'
and 20000 >= (select count(*)
from ir_mpn
where material like '%A00%'
);
,
是的。取决于您想要实现什么。
在PL / SQL中,您不能使用普通的SELECT
返回行。
一些选项是使用INTO
(就像您对COUNT()
所做的那样)或使用光标(如下所示)。
简单的方法是:
for r_material in (select manuf_part,vendor_name from ir_mpn where material LIKE '%A00%') loop
-- process each r_material record here f.e.
-- if r_material.vendor = 'ORACLE' then...
end loop;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。