使用以下样式将多行插入表格时:
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
是什么意思?这是为了什么?
答案 0 :(得分:10)
DUAL是一个内置表,很有用,因为它保证return only one row。这意味着DUAL
可用于获取诸如user
或sysdate
的伪列,计算结果等。 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
?
SQL构造 VALUES (<row-value-expression>)
是行值构造函数。 VALUES (1, 2, 3)
&#34;创建&#34;像SELECT 1, 2, 3
一样的一行值。
作为演示,不是在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