一个替代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
古德云(goodkvm)怎么样?古德云是一家成立于2020年的商家,原名(锤子云),古德云主要出售VPS服务器、独立服务器。古德云主打产品是香港cn2弹性云及美西cn2云服务器,采用的是kvm虚拟化构架,硬盘Raid10。目前,古德云香港沙田cn2机房及美国五星级机房云服务器,2核2G,40G系统盘+50G数据盘,仅35元/月起,性价比较高,可以入手!点击进入:古德云goodkvm官方网站地址古德...
bgp.to对日本机房、新加坡机房的独立服务器在搞特价促销,日本独立服务器低至6.5折优惠,新加坡独立服务器低至7.5折优惠,所有优惠都是循环的,终身不涨价。服务器不限制流量,支持升级带宽,免费支持Linux和Windows server中文版(还包括Windows 10). 特色:自动部署,无需人工干预,用户可以在后台自己重装系统、重启、关机等操作!官方网站:https://www.bgp.to...
达州创梦网络怎么样,达州创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,一手四川托管服务商,成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快,直连省骨干,大网封UDP,无视UDP攻击,机房集群高达1.2TB,单机可提供1...