繁体   English   中英

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

[英]While inserting multiple rows what does the statement 'select 1 from dual' do?

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

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意义中select 1 from dual是什么意思? 这是什么?

DUAL是一个内置表,很有用,因为它保证只返回一行 这意味着DUAL可用于获取伪列,例如usersysdate ,计算结果等。 DUAL的所有者是SYS但每个用户都可以访问它。 DUAL在文档中有很好的介绍。 了解更多

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

简要重新介绍一排表

有些SQL数据库需要的所有值来自一个表或表状物体,而另一些允许查询构建值无中生有

-- 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) “创建”一行值,就像SELECT 1, 2, 3一样。

甲骨文,当然,要求这些值什么地方来。

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

有一些关于在查询中使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM