Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果是计数(列),则在Oracle中选择_Sql_Oracle_If Statement - Fatal编程技术网

Sql 如果是计数(列),则在Oracle中选择

Sql 如果是计数(列),则在Oracle中选择,sql,oracle,if-statement,Sql,Oracle,If Statement,我可以在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 materi

我可以在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
五排怎么样

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
返回行。 有些选项是使用
进入
(就像您对
COUNT()
所做的那样)或使用游标(如下所示)

简单的方法是:

for r_material in (select manuf_part, material, vendor, 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;

非常感谢你!!但这只适用于简单的直接查询。如果使用连接进行长查询,则需要时间。当然需要。没有免费的午餐。或者换句话说,当查询读取并处理了20k条记录时,我可以在Oracle中终止查询吗?最简单的选择是
选择。。。从ir\u mpn那里。。。rownum只是为了澄清一下,如果匹配行少于20001行,您是否希望不返回任何内容,并将结果总数限制为20K?所以如果有15K行,什么也不显示,如果有25K行,显示20K?明白了。非常感谢你!