2016-11-11 24 views
0

我遇到了必须将硬编码数据添加到表格中的场景。有成千上万的条目,有没有办法通过一次性查询添加它?的数据是像在下述格式:一次性在表格中添加硬编码数据

'1777193992', '1777535342', '1777519577', '1777725624', '1777311315', '1771416476', '1779312636', '1777125359'

我已经试过这样:

SELECT '1777193992', '1777535342', '1777519577', '1777725624', '1777311315', '1771416476', '1779312636', '1777125359' FROM dual; 

但它给我的数据行。我想要将数据插入列中。

+0

成千上万的值来自哪里?如果你有它们的文件,那么外部表或SQL \ * Loader将是选项。如果没有其他方法,但你必须稍微处理值列表。 (还有什么是目标列数据类型?你所有的例子都是数字,但你把它们当作字符串处理?) –

回答

2

用一堆INSERT命令创建一个脚本,每个值一个INSERT。
然后将此脚本加载到您最喜欢的编辑器中,并一次运行它。

马在这种情况下最喜欢的方法是使用电子表格来生成SQL命令。
通过电子表格,我可以在几分钟内为数十万个值生成脚本。

一个简单的例子(使用谷歌片):

  • 值在列
  • 在B1细胞输入公式:="INSERT INTO tablename(columnname) VALUES('"&A1&"');"
  • 拷贝formua从B1细胞以乙柱剩余的细胞
  • 选择B列并将其内容复制到文本编辑器中,并在最后追加COMMIT;-这是我们的SQL脚本,可以“随时”运行 - 只需将其加载到SQL Developer中,然后点击F5

enter image description here

INSERT INTO tablename(columnname) VALUES('1777193992'); 
INSERT INTO tablename(columnname) VALUES('1777535342'); 
INSERT INTO tablename(columnname) VALUES('1777519577'); 
INSERT INTO tablename(columnname) VALUES('1777725624'); 
INSERT INTO tablename(columnname) VALUES('1777311315'); 
INSERT INTO tablename(columnname) VALUES('1771416476'); 
INSERT INTO tablename(columnname) VALUES('1779312636'); 
INSERT INTO tablename(columnname) VALUES('1777125359'); 
COMMIT; 
0

如果你不想生成并运行大量的个人INSERT语句有几种方法可以将数据作为单个插入结合,如双重选择每个单独的值和unioning在一起:

insert into tablename(columnname) 
select '1777193992' from dual 
union all select '1777535342' from dual 
union all select '1777519577' from dual 
union all select '1777725624' from dual 
union all select '1777311315' from dual 
union all select '1771416476' from dual 
union all select '1779312636' from dual 
union all select '1777125359' from dual 
/

the insert all syntax稍微滥用多表插入的想法:

insert all 
    into tablename(columnname) values ('1777193992') 
    into tablename(columnname) values ('1777535342') 
    into tablename(columnname) values ('1777519577') 
    into tablename(columnname) values ('1777725624') 
    into tablename(columnname) values ('1777311315') 
    into tablename(columnname) values ('1771416476') 
    into tablename(columnname) values ('1779312636') 
    into tablename(columnname) values ('1777125359') 
select * from dual 
/

您可以通过修改@krokodilko显示的内容来从Excel生成这些文件。

您还可以创建一个集合,您可以使用各个值填充该集合;这里使用built-in odcivarchar2list collection type

insert into tablename(columnname) 
select column_value 
from table(sys.odcivarchar2list('1777193992', '1777535342', '1777519577', 
    '1777725624', '1777311315', '1771416476', '1779312636', '1777125359')) 
/

...尽管你可能有问题more than 1000 entries listed like that,你可以解决由PL/SQL填充集合 - 这使得这种方法在这种情况下,缺乏吸引力。

但是,如果您有一个值列表,那么您可能会发现通过external tableSQL*Loader甚至通过SQL Developer的导入机制加载它们会更容易。

如果您在自己的应用程序中有该列表,您可能可以从数组中填充集合,然后使用上面的table()版本,但具体取决于您使用的语言和驱动程序。

相关问题