一个替代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
bgp.to对日本机房、新加坡机房的独立服务器在搞特价促销,日本独立服务器低至6.5折优惠,新加坡独立服务器低至7.5折优惠,所有优惠都是循环的,终身不涨价。服务器不限制流量,支持升级带宽,免费支持Linux和Windows server中文版(还包括Windows 10). 特色:自动部署,无需人工干预,用户可以在后台自己重装系统、重启、关机等操作!官方网站:https://www.bgp.to...
老周互联怎么样?老周互联隶属于老周网络科技部旗下,创立于2019年12月份,是一家具有代表性的国人商家。目前主营的产品有云服务器,裸金属服务器。创办一年多以来,我们一直坚持以口碑至上,服务宗旨为理念,为用户提供7*24小时的轮班服务,目前已有上千多家中小型站长选择我们!服务宗旨:老周互联提供7*24小时轮流值班客服,用户24小时内咨询问题可提交工单,我们会在30分钟内为您快速解答!另免费部署服务器...
RFCHOST,这个服务商我们可能有一些朋友知道的。不要看官网是英文就以为是老外服务商,实际上这个服务商公司在上海。我们实际上看到的很多商家,有的是繁体,有的是英文,实际上很多都是我们国人朋友做的,有的甚至还做好几个品牌域名,实际上都是一个公司。对于RFCHOST商家还是第一次分享他们家的信息,公司成立大约2015年左右。目前RFCHOST洛杉矶机房VPS正进行优惠促销,采用CN2优化线路,电信双...