微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果计数列,则在Oracle中选择

如何解决如果计数列,则在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 举报,一经查实,本站将立刻删除。