一个替代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
LOCVPS发来了针对元旦新年的促销活动,除了全场VPS主机8折优惠外,针对德国/荷兰KVM #1/美国KVM#2 VPS提供终身7折优惠码(限量50名,先到先得)。LOCVPS是一家成立于2012年的国人VPS服务商,提供中国香港、韩国、美国、日本、新加坡、德国、荷兰、俄罗斯等地区VPS服务器,基于KVM或XEN架构(推荐优先选择KVM),均选择直连或者优化线路,国内延迟低,适合建站或远程办公使...
丽萨主机怎么样?丽萨主机,团队于2017年成立。成立之初主要做的是 CDN 和域名等相关业务。最近开辟新领域,新增了独立服务器出租、VPS 等业务,为了保证业务质量从一开始就选择了中美之间的 CN2 GIA 国际精品网络,三网回程 CN2 GIA,电信去程 CN2 GIA + BGP 直连智能路由,联通移动去程直连,原生IP。适合对网络要求较高的用户,同时价格也比较亲民。点击进入:丽萨主机官方网站...
目前云服务器市场竞争是相当的大的,比如我们在年中活动中看到各大服务商都找准这个噱头的活动发布各种活动,有的甚至就是平时的活动价格,只是换一个说法而已。可见这个行业确实竞争很大,当然我们也可以看到很多主机商几个月就消失,也有看到很多个人商家捣鼓几个品牌然后忽悠一圈跑路的。当然,个人建议在选择服务商的时候尽量选择老牌商家,这样性能更为稳定一些。近期可能会准备重新整理Vultr商家的一些信息和教程。以前...