一个替代SQL NOTFOUND的算法
王军
通常在使用SQL数据查询时要使用不同的数据库资源共同查询目标项的存在要利用到缓存CASH处理技术。也就是说先查本地资源再查远程或利用其他手段得到其资源与之对应的条目。
简单的说存在本地数据库表A与远程数据库资源FAR下的同结构表B。查询在一定条件下的记录 比如说身份证信息。A代表CD市居民数据库 B代表全国数据库。在CD当地居民普查时首先查询本地数据库资源在没有查询结果时远程查询全国资源库。
SQL传统的作法是
SELECT 姓名性别住址FROM A WHERE身份证号码=’123456789012’
EXCEPTION
WHEN NO_DATA_FOUND THEN
SELECT 姓名性别住址FROM B@FAR
WHEN OTHERS THEN
其他处理
END
可以看到处理机制是在错误处理段内。继续可能会带来不可预料的后果。
ORACLE利用光标sqlcur处理时也是在判断sqlcur和NOTFOUND的与操作来判断是否查找到例如
CURSOR c1
Is
SELECT 姓名性别住址FROM A WHERE身份证号码=’123456789012’FETCH C1;
WHILE C1%FOUND LOOP
处理
END LOOP;
IF C 1%NOTFOUND THEN
SELECT 姓名性别住址FROM B@FAR
END IF;
可以看出处理较为复杂并切不通用。
笔者提出一种替代算法算法的核心是集合加法运算用数字代替NOTFOUND达到安全可靠并且通用与便于利用。对于上述的解决方案是
SELECT ROWNUM,姓名性别住址FROM A
WHERE身份证号码=’123456789012’
UNION ALL
SELECT NVL(null,0) ,null,null,null from dual
在利用变量时
select ROWNUM,姓名,性别,住址into变量1,变量2,变量3,变量4from (
SELECT ROWNUM,姓名,性别,住址FROM A
WHERE身份证号码=’123456789012’
UNION ALL
SELECT NVL(null,0) ,null,null,null from dual
)where rownum=1;
IF变量1=0 THEN (没有找到)
SELECT 姓名性别住址FROM B@FAR
END IF
数脉科技六月优惠促销发布了!数脉科技对香港自营机房的香港服务器进行超低价促销,可选择30M、50M、100Mbps的优质bgp网络。更大带宽可在选购时选择同样享受优惠,目前仅提供HKBGP、阿里云产品,香港CN2、产品优惠码续费有效,仅限新购,每个客户可使用于一个订单。新客户可以立减400元,或者选择对应的机器用相应的优惠码,有需要的朋友可以尝试一下。点击进入:数脉科技官方网站地址数脉科技是一家成...
不知道大家是否注意到sharktech的所有服务器的带宽价格全部跳楼跳水,降幅简直不忍直视了,还没有见过这么便宜的独立服务器。根据不同的机房,价格也是不一样的。大带宽、不限流量比较适合建站、数据备份、做下载、做流媒体、做CDN等多种业务。 官方网站:https://www.sharktech.net 付款方式:比特币、信用卡、PayPal、支付宝、西联汇款 以最贵的洛杉矶机器为例,配置表如...
老周互联怎么样?老周互联隶属于老周网络科技部旗下,创立于2019年12月份,是一家具有代表性的国人商家。目前主营的产品有云服务器,裸金属服务器。创办一年多以来,我们一直坚持以口碑至上,服务宗旨为理念,为用户提供7*24小时的轮班服务,目前已有上千多家中小型站长选择我们!服务宗旨:老周互联提供7*24小时轮流值班客服,用户24小时内咨询问题可提交工单,我们会在30分钟内为您快速解答!另免费部署服务器...