关于Oracle SQL * Plus中的双表结构

时间:2013-01-22 09:41:15

标签: sql

我们知道“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 ..

1 个答案:

答案 0 :(得分:0)

列的类型和大小仅在从中提取数据时才起作用。确实,如果您selectdummy,它只会为您提供 列中的内容。

但是,如果您为列数据选择无关的内容,例如5*5'Ankita',则他们没有此类限制。

我认为你的误解源于你的片段:

  

为什么它可以暂时保存任何数据类型如果我们插入超过1(大小)的字符,它是如何(双)接受它的呢?

事实是,列并不接受它。选择5*5使尝试将该数据放入某个地方的表中,它只是按原样评估它。拥有一张桌子并没有什么不同:

users:
    id
    name

并表演:

select 42, 3.14159, id, name from users

对于从中选择的每一行,您会看到常量值423.14159,以及从两个指定列中提取的数据。