我们知道“Dual”是一个临时表,其中包含1列,其名称为“dummy”,其为“varchar2(1)”类型,具有1个单行。该记录的值为“X”。 varchar2的大小为1,这意味着它不应允许多个单个字符。 现在我的问题是:如果它是varchar2类型,那么为什么它可以暂时保存任何数据类型如果我们插入超过1(大小)的字符,它是如何(双)接受它的呢?示例:
SQL> desc dual
Name Null? Type
------------------------------- -------- ----
DUMMY VARCHAR2(1)
SQL> select sysdate from dual;
SYSDATE
---------
22-JAN-13
SQL> select 5*5 result from dual;
RESULT
---------
25
SQL> select 'Ankita' as "Name" from dual;
Name
------
Ankita
显然,“SYSDATE”是DATE类型(不是varchar2),“RESULT”是NUMBER类型(不是varchar2)。 'Ankita'也是超过1个单个字符,即6个字符。这应该与varchar2仅保持1的结构相矛盾,并且也支持6 ..
答案 0 :(得分:0)
列的类型和大小仅在从中提取数据时才起作用。确实,如果您select
列dummy
,它只会为您提供 列中的内容。
但是,如果您为列数据选择无关的内容,例如5*5
或'Ankita'
,则他们没有此类限制。
我认为你的误解源于你的片段:
为什么它可以暂时保存任何数据类型如果我们插入超过1(大小)的字符,它是如何(双)接受它的呢?
事实是,列并不接受它。选择5*5
使不尝试将该数据放入某个地方的表中,它只是按原样评估它。拥有一张桌子并没有什么不同:
users:
id
name
并表演:
select 42, 3.14159, id, name from users
对于从中选择的每一行,您会看到常量值42
和3.14159
,以及从两个指定列中提取的数据。