暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 带有两个单引号的文字意外工作

askTom 2017-04-04
559

问题描述

嗨,汤姆,
使用Oracle多年后,我偶然发现了一个惊人的语句,SQL和PL/SQL中接受了奇怪的文字,尽管它们的语法不正确。

测试用例在LiveSQL链接中。

我在10.2.0.4和12.1.0.2版本上进行了测试。

你对此有解释吗?
谢谢




专家解答

空字符串 ''被Oracle数据库视为null。所以你有:

select ''*'' as C from dual
复制


它被解释为

select null * null as C from dual;
复制


* 是Oracle数据库中的乘法运算符。所以你所拥有的是空乘以空!(为null)。同样,正斜杠 “/” 是除法运算符。所以

select ''/'' as C from dual
复制


是null除以null。但是 “X” 和空间 “” 不是运算符。他们只是那些角色。这就是为什么:

select ''X'' as C from dual
复制


给出一个错误。您可以在两组两个单引号之间使用任何二进制运算符来获取null:

set null 
select ''+'' as C from dual;

C       
 

select ''-'' as C from dual;

C       
 
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论