`

用一条insert语句来插入多行数据

阅读更多
oracle、sqlserver不支持insert into t(x) values (),();
只有mysql支持 insert into t(x) values (),();

insert all 遇到 sequence
当insert all 遇到 sequence
这几天在修改商函2.0中相关的PL/SQL包代码时,在实现这样一个SQL时:
insert all into bo(object_name,sn) values(object_name,seqkey)
                into co(object_name,sn)  values(object_name,seqkey)
select object_name ,sq1.nextval from ao
ORACLE 报ORA-02287错,原因是INSERT ALL 需要插入多表,但SELECT部分的SEQUENCE不允许一次SELECT多值,解决方案有两个:
方法一:编一个函数,将获取sq1.nextval的过程写在函数中,再在select 部分引用函数,如下:
create or replace function f_getseqkey return number is
result number;
begin
select sq1.nextval into result from dual ;
return result ;
end;

SQL:insert all into bo(object_name,sn) values(object_name,seqkey)
                        into co(object_name,sn) values(object_name,seqkey-1)
select object_name ,f_getseqkey() seqkey from ao;
说明:这里有个-1的行为,研究发现,在插入多表时,实际上后面的SELECT是有做两次NEXTVAL行为的,而为了确保两个INTO插入同样的序列值,则人为进行-1插作,这个方案的后果是会多用序列值,在插入更多表的情况下,可能造成应用键值紧张,另外额外调用函数,性能也会下降。
方法二:
SQL:insert all into bo(object_name,sn) values(object_name,sq1.nextval)
                          into co(object_name,sn) values(object_name,sq1.nextval)
          select object_name from ao 
这个方法最好,无需定义函数,也不多用序列,性能也好,
现象:在两个INTO中都使用了NEXTVAL,但能确保是相同的值吗?答案是OK,因为INSERT ALL 到多表,在ORACLE看来是同一SQL,即类同:SELECT SEQ.NEXTVAL,SEQ.NEXTVAL FROM DUAL这样的SQL,同一SQL中多次调用同一序列,值相同。但如果在同一SQL中多次调用这个自定义函数,则会获得不同的值。


部分来自于:http://blog.csdn.net/xuxurui007/article/details/7692065
分享到:
评论

相关推荐

    Insert语句插入多行数据.pdf

    在数据库管理中,INSERT语句是用于...总之,使用INSERT语句插入多行数据是数据库操作中的常用技巧,它提高了数据输入的效率,尤其是在处理大量数据时。熟练掌握这一技能对于任何数据库管理员或开发人员来说都至关重要。

    sqlserver中向表中插入多行数据的insert语句

    下面将详细介绍如何使用`INSERT`语句插入多行记录。 首先,我们需要了解基本的`INSERT INTO`语句结构。通常,插入单行数据是这样的: ```sql INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3); ``` 然而...

    sql下三种批量插入数据的方法

    第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...

    第11章_数据处理之增删改.docx

    这种方式可以提高插入效率,因为 MySQL 执行单条 INSERT 语句插入多行数据比使用多条 INSERT 语句快。 2. 将查询结果插入到表中 INSERT 语句也可以将查询结果插入到表中,不需要一个一个输入每一条记录的值。例如...

    c#插入多条数据datagridview

    本篇将深入探讨如何利用C#来实现通过DataGridView一次性插入多条数据到数据库。 首先,我们需要理解DataGridView控件的基本用法。它是一个可视化的组件,可以展示二维表格数据,支持排序、筛选、编辑等功能。在设计...

    利用SQL语句插入批量数据.rar

    4. **使用UNION操作符**:如果你有多个单独的INSERT语句,可以用UNION来合并它们,但请注意,这种方法通常限制了每批插入的行数,并且所有INSERT语句必须具有相同的列数和数据类型: ```sql INSERT INTO 表名 (列...

    oracle SQL 语句插入数据

    你也可以一次插入多行数据,使用`INSERT ALL`语句: ```sql INSERT ALL INTO Employees (ID, Name, Salary) VALUES (1001, '张三', 5000) INTO Employees (ID, Name, Salary) VALUES (1002, '李四', 6000) SELECT...

    mysql数据插入效率比较

    2. 批量插入:将多条INSERT语句合并成一个大的SQL语句,一次性执行。相比于单条插入,批量插入减少了连接数据库的次数,从而提高了效率。然而,这种方式仍需注意SQL语句的长度限制。 3. 使用事务:在事务中进行批量...

    insert插入数据工具

    但如果你需要插入多行数据,手动编写这样的语句会非常耗时。"insert插入数据工具"可能提供了一种批量插入数据的方式,比如通过CSV或者Excel文件导入,这样可以一键将成千上万条记录快速导入到数据库中,避免了逐条...

    数据库表导出插入语句

    这个工具可以生成一个包含INSERT INTO语句的脚本,但默认情况下,它并不生成单个INSERT语句,而是将多行数据打包成一个批量INSERT语句。 3. **生成单行INSERT语句**:为了得到每个数据行对应的单独INSERT语句,我们...

    利用SQL语句插入数据.rar

    如果需要一次性插入多行数据,可以使用INSERT语句的变体,如下所示: ```sql INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1_1, 值1_2, ..., 值1_n), (值2_1, 值2_2, ..., 值2_n), ..., (值m_1, 值m_2, ..., ...

    一个完整程序只有一条SQL语句

    一条SQL语句可能包含多个值,通过这种方式一次性插入多行数据。例如: ```sql INSERT INTO TableName (Column1, Column2, ...) VALUES (Value1, Value2, ...), (Value1, Value2, ...) ``` 2. **读取(Read)**: ...

    第7章 插入、更新与删除数据.ppt

    插入数据可以使用多种方式,例如,使用INSERT语句插入单条记录,也可以使用多个INSERT语句插入多条记录。此外,还可以使用INSERT语句与SELECT语句组合,快速地从一个或多个表中向另一个表中插入多个行。 知识点3:...

    plsql批量导入数据

    首先,查询或处理数据集,然后一次性收集到PL/SQL变量集合中,最后通过FORALL语句插入到表中。例如: ```plsql DECLARE TYPE tab_type IS TABLE OF your_table%ROWTYPE INDEX BY PLS_INTEGER; tab_data tab_type; ...

    提高mysql插入数据的速度.pdf

    例如,可以在一个INSERT语句中一次性插入多行数据,而不是一条一条地插入。使用“INSERT INTO table_name VALUES (...), (...), (...);”的格式可以实现这一点。 2. 调整MySQL配置参数: - `bulk_insert_buffer_...

    odbc 数据库批量插入操作

    3. **准备SQL语句**:对于批量插入,我们可以使用`INSERT INTO`语句,结合`VALUES`子句或者`BULK INSERT`(如果支持的话)来一次性插入多行数据。例如: ``` INSERT INTO TableName (Column1, Column2, ...) ...

    insert-query-in-postgres-database.zip_in_postgres

    这允许你在一条SQL语句中插入多行记录,提高了效率。 三、从查询结果中插入数据 如果你有一个查询结果,想要将其插入到另一个表中,可以使用`INSERT ... SELECT`语句: ```sql INSERT INTO destination_table ...

    表格生成SQL插入语句

    3. 生成SQL:完成映射后,工具会自动生成一系列INSERT INTO语句,每条语句对应表格中的一行数据。这些语句通常会采用“VALUES (value1, value2, ...)”的形式,其中的值来自表格数据。 4. 执行SQL:生成的SQL语句...

    批量插入大量数据

    批量插入是将多个INSERT语句合并成一个大的INSERT语句,或者通过编程语言提供的API一次性提交多行数据。这样可以减少与数据库服务器之间的交互次数,从而提高性能。例如,在SQL中,你可以使用`INSERT INTO table_...

    MySQL DML - 插入数据.md

    在MySQL中,插入数据主要通过`INSERT INTO`语句来实现。以下为插入数据的基础语法结构: ```sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 其中: - `...

Global site tag (gtag.js) - Google Analytics