2015-11-08 126 views
1

Oracle中的2'2'有什么区别?执行时出错

不同的数据类型?

select 1 from tab union select '2' from tab; 

发生错误

+0

是的,不同的数据类型 – Clive

回答

3

是的,不同的数据类型; 2是一个整数,其中'2'是一个字符串文字,因此它们处于不同的数据类型中,这就是为什么你会收到错误。

当您使用UNION时,数据类型应该匹配;他们应该是整数或字符串文字是这样的:以@Mahmoud贾迈勒答案更

select 1 from tab union select 2 from tab; 
+0

Intriguiingly,Oracle文档(http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_el ements003.htm#i139891)在文字“1”是数字还是整数时是不一致的。该文档包含两个不带小数点的数字字符串的示例。 (这个细节并没有真正改变答案。) –

+0

@GordonLinoff - 啊哈,谢谢你的提示。我不知道Oracle术语。 –

+0

这里它所区分的位奇数并不是一个单独的类型。关于使用文本文字的一点更加陌生,因为它建议隐式转换。即使NLS设置具有逗号作为小数分隔符,数字文字仍然总是使用句点。 –

0

位信息 看到简单的测试

create table t1 as select 1 as col1 from dual; 
create table t2 as select '1' as col1 from dual; 

,然后在SQL Plus中我们可以看到,t1.col1是数值,但是t2.col1是CHAR(1)

Connected to Oracle Database 11g Express Edition Release 11.2.0.2.0 
Connected as *** 

SQL> desc t1; 
Name Type Nullable Default Comments 
---- ------ -------- ------- -------- 
COL1 NUMBER Y       

SQL> desc t2; 
Name Type Nullable Default Comments 
---- ------- -------- ------- -------- 
COL1 CHAR(1) Y       

SQL>