当前位置:首页 » 编程语言 » sqlfound

sqlfound

发布时间: 2022-06-16 05:41:05

1. sql%NOTFOUND是什么是ORACLE的全局变量吗

是游标的属性。

cursor%NOTFOUND,布尔值,游标没有获取到结果时为 True。与%FOUND结果相反。

游标名称为 SQL,表明这是一个隐式游标。在程序块中执行一个语句,就会打开一个游标,并自行管理。

BEGIN
DELETEempWHEREempno='7788';
IFSQL%FOUNDTHEN
dbms_output.put_line('删除成功。');
ELSE
dbms_output.put_line('没有数据被删除。');
ENDIF;
END;
/

2. select found_row()没效果

判断Select得到的行数用found_rows()函数进行判断。
比如说有段sql需要取出一张表的前10行,同时又需要取出符合条件的总数。这在某些分页操作中很常见在上一查询之后,你只需要用FOUND_ROWS()就能获得查询总数,这个数目是抛掉了LIMIT之后的结果数。
其中第一个sql里面的SQL_CALC_FOUND_ROWS不可省略,它表示需要取得结果数,也是后面使用FOUND_ROWS()函数的铺垫。

3. mysql 里是否有sql%notfound

SQL%NOTFOUND,这是隐式游标属性,这类东西的使用只能在plus脚本里面,oracle pl/sql的语法

不会出现在MySQL

4. MYSQL中SQL_CALC_FOUND什么意思

MySQL不符合SQL标准的地方不少,比如TIMESTAMP列的处理,字符串比较默认大小写不敏感什么的。有时候这些问题会让你很郁闷,尤其是对从其它数据库转过来的人来说。但有些功能倒也蛮有趣。今天我就发现一个:SQL_CALC_FOUND_ROWS。所谓SQL_CALC_FOUND_ROWS是指在执行带LIMIT的查询时,附带统计一下如果不加LIMIT的话将会输出多少条结果(注意这个不是估计估计,而是精确的哦)。在做分页显示的时候,就可以用这个功能还计算总共有多少页,性能一定是比不带LIMIT直接查询的要高。
不过在没有搞清楚这个玩意是怎么实现之前,我对这一方法的性能还是持怀疑态度。一般来说,为了得到精确的数据,访问所有的数据总是需要的,因此如果I/O是瓶颈的话,这比直接查询也好不到那里去。有些查询倒是可能可以有不少优化的,比如:
T1, T2是两个表,T1.a引用T2.a,对于查询
SELECT SQL_CALC_FOUND_ROWS * FROM T1, T2 where T1.b = 'XXX' and T2.a = T1.a;
因为T1中的每条记录在T2中一定找得到对应的,这样在SQL_CALC_FOUND_ROWS里就可以不访问T2也可以统计出精确的结果来。只不过,嘿嘿,不知道这个MySQL有没有实现。

5. 在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。

6. SQL SERVER 有没有类似于 MYSQL SQL_CALC_FOUND_ROWS 的方法

sql server中没有这样的函数或方法,不过可以自定义用户函数,嘿嘿!
sql server的分页操作和mysql的有所不同,目前来看sql server里没有这样的函数或方法,但是可以通过其它的方式来实现,直接上代码:
select * from (
select name,changliang,addtime,ROW_NUMBER() over(order by id desc) as rownum,(select COUNT(1) from Test_Data) as countdata from Test_Data
) as p where rownum between 3 and 5

在页面只要读取countdata 字段的值就可以了!
当然也可以,在查询的时候,一次性查询使用两个语句返回两个表,页面上读取的时候,读两个表,第一个表做记录,第二个表返回总条数,看语句:
select * from (
select name,changliang,addtime,ROW_NUMBER() over(order by id desc) as rownum from Test_Data
) as p where rownum between 3 and 5;select COUNT(1) from Test_Data

7. Pro C问题:PL/SQL found semantic errors

EXEC SQL SELECT BN_BANK_NAME INTO :s_name from ken_CardCenter where BN_CARDCENTER_ID='9999';

8. 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。

9. 执行完一段SQL语句后,"if sql%notfound then"表示什么意思

sql是系统自动创建隐式游标
隐式游标自动声明、打开和关闭,其名为 SQL
通过检查隐式游标的属性可以获得最近执行的DML 语句的信息
隐式游标的属性有:
SQL%FOUND – SQL 语句影响了一行或多行时为 TRUE
SQL%NOTFOUND – SQL 语句没有影响任何行时为TRUE
SQL%ROWCOUNT – SQL 语句影响的行数
SQL%ISOPEN - 游标是否打开,始终为FALSE

热点内容
黎明我的世界服务器 发布:2024-05-19 17:17:34 浏览:538
雷神g50如何设置安卓原生模式 发布:2024-05-19 16:50:04 浏览:120
c语言小数四舍五入 发布:2024-05-19 16:23:28 浏览:525
数据库被注入攻击 发布:2024-05-19 16:21:31 浏览:835
微信忘记密码从哪里看 发布:2024-05-19 16:06:37 浏览:33
宝马x4贷款买哪个配置好 发布:2024-05-19 15:56:03 浏览:23
微控pid算法 发布:2024-05-19 15:46:31 浏览:136
云盘视频解压密码 发布:2024-05-19 15:23:17 浏览:848
和平精英怎么改地区位置安卓 发布:2024-05-19 15:19:05 浏览:286
酒店的路由器如何配置 发布:2024-05-19 15:10:44 浏览:502