一个替代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
puaex怎么样?puaex是一家去年成立的国人商家,本站也分享过几次,他家主要销售香港商宽的套餐,给的全部为G口带宽,而且是不限流量的,目前有WTT和HKBN两种线路的方面,虽然商家的价格比较贵,但是每次补一些货,就会被抢空,之前一直都是断货的状态,目前商家进行了补货,有需要这种类型机器的朋友可以入手。点击进入:puaex商家官方网站Puaex香港vds套餐:全部为KVM虚拟架构,G口的带宽,可...
LayerStack(成立于2017年),当前正在9折促销旗下的云服务器,LayerStack的云服务器采用第 3 代 AMD EPYC™ (霄龙) 处理器,DDR4内存和企业级 PCIe Gen 4 NVMe SSD。数据中心可选中国香港、日本、新加坡和洛杉矶!其中中国香港、日本和新加坡分为国际线路和CN2线路,如果选择CN2线路,价格每月要+3.2美元,付款支持paypal,支付宝,信用卡等!...
CloudCone 商家也是比较有特点的,和我们熟悉的DO、Vultr、Linode商家均是可以随时删除机器开通的小时计费模式。这个对于有需要短租服务器的来说是比较有性价比的。但是,他们还有一个缺点就是机房比较少,不同于上面几个小时计费服务商可以有多机房可选,如果有这个多机房方案的话,应该更有特点。这次我们可以看到CloudCone闪购活动提供洛杉矶三个促销方案,低至月付1.99美元。商家也可以随...