插入多行时,语句'从双选择1'是什么?

时间:2013-03-13 04:32:47

标签: sql oracle oracle11g multiple-insert

使用以下样式将多行插入表格时:

insert all

into ghazal_current (GhazalName,Rating) values('Ajab Apna Haal Hota Jo Visaal-e-Yaar Hota',5)
into ghazal_current (GhazalName,Rating) values('Apne Hothon Par Sajana Chahta Hun',4)
into ghazal_current (GhazalName,Rating) values('Shaam Se Aankh Mein Nami Si Hai',4)
into ghazal_current (GhazalName,Rating) values('Tumhe Yaad Ho Ke Na Yaad Ho',3)

select 1 from dual;

声明select 1 from dual是什么意思?这是为了什么?

3 个答案:

答案 0 :(得分:10)

DUAL是一个内置表,很有用,因为它保证return only one row。这意味着DUAL可用于获取诸如usersysdate的伪列,计算结果等。 DUAL的所有者是SYS,但每个用户都可以访问它。 DUAL在文档中有很好的介绍。 Find out more

在您的情况下,SELECT 1 FROM DUAL;只会返回1。您需要它,因为INSERT ALL语法需要SELECT子句,但您不是从表中查询输入值。

答案 1 :(得分:3)

简要重新介绍一排表

某些SQL数据库要求所有值 FROM 表或类似对象,而其他SQL数据库允许查询构造值 ex nihilo

-- MySQL, sqlite, PostgreSQL, HSQLdb, and many others permit
-- a "naked" select:
SELECT 1;

-- Others *require* a FROM target, like Oracle.
SELECT 1 FROM DUAL;

-- ...and Firebird/Interbase:
SELECT 1 FROM RDB$DATABASE;

-- ...and DB2:
SELECT 1 FROM SYSIBM.SYSDUMMY1;

这里DUAL的基数很重要。如果它有多行,则结果集将有多行。例如,当您SELECT 1 FROM A_Table_With_Ten_Rows

时会发生什么

为什么在这里使用DUAL

SQL构造 VALUES (<row-value-expression>) 是行值构造函数。 VALUES (1, 2, 3)&#34;创建&#34;像SELECT 1, 2, 3一样的一行值。

当然,Oracle要求这些值来自某处 FROM

作为演示,不是在INSERT ALL结尾处从DUAL中选择SELECT,而是尝试使用 N 行的表,并且您将看到每个VALUES()行是插入 N 次。

答案 2 :(得分:-1)

有一些关于在查询中使用dual的示例:

   select sysdate from dual  /--it returns date of system
    SELECT chr(223) FROM dual /--it returns character of Asciهi code
    select  my_sequence.nextval from dual; /-- It returns the next value of a sequence
    select to_char(sysdate,'yyyy/mm/dd','nls_calendar=persian')from dual 
    /--returns persian date of system