在PL/SQL中怎样判断查询的结果是不是为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PL/SQL中怎样判断查询的结果是不是为空相关的知识,希望对你有一定的参考价值。

1、只有一个查询结果的查询:
select min(to_char(b.arrive_date,'yyyymmdd')||lpad(b.arrive_time,6,0)||c.xs_mc)
into vtmpstr
from tb_evt_bag_mail_rela a, tb_evt_route_bag_rela b, tb_jgjm c
where a.mail_num = vmail_num

。。。。。。
对这个查询,只需判断变量vtmpstr是否为空就可以了,即:
if vtmpstr is null then
注意:查询中用聚合函数才可以这样用,如果直接取一个值,又没有结果,则会出错跳出模块,跑到例外处理那儿去了,如下面语句:
select city_name into vcity_jdj
from tb_county
where xs_code=substr(vrcv_area,1,4);
如果没有查询结果,或者多个查询结果,都会出错跑到例外处理那儿,所以应该写成下面格式:
select min(city_name) into vcity_jdj
from tb_county
where xs_code=substr(vrcv_area,1,4);

2、游标的查询结果:
OPEN cur_get_trans(vin_date,vmail_num);
LOOP
FETCH cur_get_trans
INTO vdeal_date,vdeal_time,vdeal_org_code,vlabel_strip,
vmway_code,vflight_name,vdepart_date,vdepart_time;
--判断查询结果
if cur_get_trans%found then

。。。
else
。。。
end if;
或者退出循环处理,即:
OPEN cur_get_trans(vin_date,vmail_num);
LOOP
FETCH cur_get_trans
INTO vdeal_date,vdeal_time,vdeal_org_code,vlabel_strip,
vmway_code,vflight_name,vdepart_date,vdepart_time;
EXIT WHEN cur_get_mail%NOTFOUND;

--处理有结果的查询
END LOOP;
--处理无结果的查询
--注意,有查询结果处理完毕也会执行到此处,所以要区分上面是否进行过有结果的处理。
CLOSE cur_get_trans;
===================================================================
附:
1、游标相关的4个语句:
declare(声明)、open(打开)、fetch(取数)、close(关闭)。
2、游标相关的4个属性:%isopen, %found, %notfound,和 %rowcount
(1)%Isopen:布尔型,用于检测游标是否已经打开。如果游标已经打开,返回true,否则返回false。
(2)%found:布尔型,判断最近一次执行fetch语句后,是否从缓冲区中提取到数据,返回true,否则返回false。
(3)%notfound:与%found相反。
(4)%rowcount:数值型,返回到目前为止已经从游标缓冲区提取数据的行数。在fetch语句没有执行之前,该属性值为0。
使用隐式游标%found属性,sql%found;
使用显示游标%found属性,cur_get_trans%found。
参考技术A 微软SQL数据库判断:
方法1、

1
2
3
4
5

select * from 表
if @@rowcount>0
print '查询结果不为空'
else
print '查询结果为空'

方法2、

1
2
3
4

if exists(select * from 表)
print '查询结果不为空'
else
print '查询结果为空'本回答被提问者采纳

“delphi”怎样判断“adoquery”查询后的结果是不是为空?

参考技术A 1、使用adoquery2.IsEmpty判断是否为空\\x0d\\x0a或者使用if adoquery2.RecordCount>0 then\\x0d\\x0aif not(adoquery2.IsEmpty) then\\x0d\\x0a begin\\x0d\\x0a ShowMessage("此产品已存在");\\x0d\\x0a exit;\\x0d\\x0a end;\\x0d\\x0a2、 SQL语句中引入参数之后,在执行SQL语句之前就必须给参数赋值。如何赋值呢?这就要用到ADOQuery组件的Parameters属性。该属性是一个下标从0开始的数组:\\x0d\\x0aParameters[0]、Parameters[1]、Parameters[2]、?、\\x0d\\x0a其中的每个数组元素与ADOQuery组件的SQL语句中的参数相对应,例如要给SQL语句中的第一个参数赋值,可以执行如下语句:\\x0d\\x0a\\x0d\\x0aADOQuery1.Parameters[0].Value:=<参数值>\\x0d\\x0a\\x0d\\x0a要给SQL语句中的第二个参数赋值,可以执行如下语句:\\x0d\\x0a\\x0d\\x0aADOQuery1.Parameters[1].Value:=<参数值> \\x0d\\x0a\\x0d\\x0a以此类推 ? \\x0d\\x0a\\x0d\\x0a除了用Parameters[0].Value 、Parameters[1].Value 等来给SQL语句中的参数赋值外,还可以使用如下语句:\\x0d\\x0a\\x0d\\x0aParameters.ParamByName(<参数名>).Value:=<参数值> \\x0d\\x0a\\x0d\\x0a来给参数赋值。例如,例Parameters[0].Value:=edit1.Text;可以改为:\\x0d\\x0a\\x0d\\x0aParameters.ParamByName(‘XianShi’).Value:=edit1.Text;\\x0d\\x0a\\x0d\\x0a很明显,后一种方式比前一种更直观一些。 \\x0d\\x0a\\x0d\\x0aSQL命令中带有多个参数的情形\\x0d\\x0a\\x0d\\x0aSQL命令中可以带有多个参数,例如:某个Query组件,为它编写如下的动态SQL语句: \\x0d\\x0a\\x0d\\x0aInsert Into Customer(CustNo,Name,Country) Values(:CustNo ,:Name ,:Country) \\x0d\\x0a\\x0d\\x0a对于上述这条动态SQL语句中的三个参数,可以利用Query的Params属性为参数赋值:\\x0d\\x0a\\x0d\\x0aQuery.Params[0].AsString:=”1998” ;\\x0d\\x0a\\x0d\\x0aQuery.Params[1].AsString:=”AAA” ;\\x0d\\x0a\\x0d\\x0aQuery.Params[2].AsString:=”China”; \\x0d\\x0a\\x0d\\x0a上述语句将把“1998”赋给参数CustNo,“AAA”赋给参数Name,“China”赋给参数Country。

以上是关于在PL/SQL中怎样判断查询的结果是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL查询结果如何自动换行

“delphi”怎样判断“adoquery”查询后的结果是不是为空?

Oracle PL/SQL查询结果如何自动换行

pl/sqldeveloper工具的sql窗口查询完毕点下拉(获取最后页)时候卡住,要很久才执行完,求解决办法。

如何在pl/sql中判断一个记录变量为空

PL/SQL 查询结果采用科学计数法,如何改变属性。