概念:
在Oracle数据库内有一种特殊的表Dual。Dual表是Oracle中的一个实际存在的表,任何用户均可读取专,常用在没有目标表的属Select中。Dual表由Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X。从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。
Dual简单的说就是一个空表,Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。常用来通过select语句计算常数表达式。
特性:
1、Oracle提供的最小的表,不论进行何种操作(不要删除记录),它都只有一条记录——‘X’。
例如:执行select * from dual,里面只有一条记录;执行insert into dual values(‘Y’)后,再次查询dual表,仍然显示一条记录。
2、是sys用户下的一张内部表,所有用户都可以使用DUAL名称访问,无论什么时候这个表总是存在
例如:执行一个查看当前日期的语句 select sysdate from dual,这条语句在放在放在任何一个oracle数据库当中都不会报错,所以一般做一些特定查询的时候用这个表是最稳妥的。
因为select * form dual可以组成一条临时数据的dual表,通过union all就可以变成多条数据的临时表了
<foreach collection="list" index="index" item="item" open=""
close="" separator="union all">
SELECT
#{item.ID,jdbcType=NUMERIC} as ID,
#{item.NAME,jdbcType=NUMERIC} as NAME,
#{item.sex,jdbcType=STRING} as sex
FROM dual
</foreach>
<insert id="insertCitiFixData">
insert into C167969OMC.CITIFIX_TAG_DESCRIPTION
select A.* FROM (
<foreach collection="map" index="key" item="value" separator="union all">
select
#{key, jdbcType=CLOB} as field_spec,
#{value} as field_description
from dual
</foreach>
) A
</insert>