设为首页 收藏本站
查看: 1166|回复: 0

[经验分享] ORACLE里面的外连接和||

[复制链接]

尚未签到

发表于 2016-7-25 07:42:38 | 显示全部楼层 |阅读模式
   ORACLE里面的外连接可以简写成:
   (+)=:右连接的简写
   也就是:保留右表存在,左表不存在的行!
  =(+):左连接
   也就是:保留左表存在,右表不存在的行!
   对于这种简写的局限性是显而易见的
  可读性就很差,需要花时间去理解.因为我们的思维方式是:首先是怎么去连接,然后用什么条件过滤!分成两步走,便使得SQL清晰易懂.
  记得在数据结构里面,完成表达式求解的算法也是采取分两步走的策略,一:转换成后缀表达式,二:然后在求职!虽然一步理论上可以达到,但是根据电脑的思维方式,采取两步走,是最容易实现的!
  而SQL就是宣称的以人类的思考方式去解决问题!
  
  
  ||在ORACLE里面是连接字符串,相当于+
  在构造可执行的SQL字符串时候,对于IN 变量,动态构造SQL语句时候如下所示

       then
         tempsql := ' and sp.department_oid = '||''''||de_oid||'''';
end if;           
if vFlag = '1' then
if flag ='1' then
open result for
'select t.inv_stock_oid INV_STOCK_OID,t.stock_type_id STOCK_TYPE_ID,t.inv_position_oid INV_POSITION_OID,nvl(t.safety,0)-t.qty state,
t.part_no PART_NO,t.part_name PART_NAME,t.spec SPEC,t.unit UNIT,t.qty TOTALQTY,t.safety SAFETY,t.update_time UPDATE_TIME,
t1.potion_id POSITION_ID,t1.description POSITION_DESC,t2.stock_type_id STOCK_TYPE_ID,t2.description TYPE_DESC,
sp.inv_partnoclass_oid partnoclassoid,sp.qty DEQTY,sp.safe_qty SAFEQTY,de.department_name DEPARTMENT
from inv_stock t,inv_position t1,inv_stock_type t2,inv_stock_partnoclass sp,basicdata_department de
where  de.department_oid(+) = sp.department_oid'
||tempsql||'
and sp.inv_stock_oid(+) = t.inv_stock_oid
and t.stock_type_id = t2.inv_stock_type_oid
and t.inv_position_oid = t1.inv_position_oid(+)
and t2.description='||''''||vCondition||''''||'                    
order by state desc';
return result;
  注意特别奇怪的如下写法

tempsql := ' and sp.department_oid = '||''''||de_oid||'''';
t2.description='||''''||vCondition||''''||'  
   
  为什么会有那么多单引号呢?
  首先我来说我们期望的结果是:对于变量,这里用字符串常量来代替
  sp.department_oid = 'something';
  而在代码中那个变量仅仅替代值,也就是something,
  还有前后两个单引号需要表示出来,但是它们是直接常量,所以当作字符串写,就需要再加两个单引号括起来,最后转义的一个
  所以每次总共四个!
  
  一定有比这个更好的解决办法,目前由于对于ORACLE是新手,好多东西都有待学习
  欢迎共同讨论
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248844-1-1.html 上篇帖子: Oracle数据库数据缓冲区大小 下篇帖子: JDBC操作ORACLE的CLOB型字段
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表