用纯SQL语句向DB2数据表中插入大量数据

Lucky402 2008-11-30 10:27:55
第一次用DB2数据库,想往数据表中插入20万条数据,表中有过个字段,其中有个num字段要求递增,其它字段的值可以赋相同的,直接在命令窗口执行就可以了,但不知道怎么写,请大家帮忙,谢谢!
...全文
3938 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
heric_a 2010-10-27
  • 打赏
  • 举报
回复
SQL1024N 不存在数据库连接. SQLSTATE=08003
问题原因:导入时db2密码不正确也会这样报错
wuwen624 2008-12-30
  • 打赏
  • 举报
回复
楼主需要的是应该先弄清楚最基本的操作,再提问。类似“提示DB21034E 该命令被当作SQL语句来处理,因为它是无效的"命令行处理器"命令.在SQL处理期间,它返回:SQL1024N 不存在数据库连接. SQLSTATE=08003”这样的问题,确实有点。。。。。
tianqiao1689 2008-12-17
  • 打赏
  • 举报
回复
好办法,支持
Lucky402 2008-12-09
  • 打赏
  • 举报
回复
在命令编辑器里面之后的结果如下:

------------------------------ 输入的命令 ------------------------------
create procedure import_data()

language sql

begin

declare i int default 1;

set i=1;
while i<10000
do
INSERT INTO ashare_ordwth_12928 (rec_num, "date", "time", reff, acc, stock, bs, price, qty, status, owflag, ordrec, firmid, checkord)
VALUES(i, '20070315', '09:15:00', '11A1019486', 'A354972082', '600182', 'S', '6.09','100', 'R', 'LPT', '', '',NULL);
set i=i+1;
end while

end;
------------------------------------------------------------------------------
create procedure import_data()

language sql

begin

declare i int default 1
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "lare i int default 1" 后面找到异常标记
"END-OF-STATEMENT"。预期标记可能包括:"<psm_semicolon>"。 LINE NUMBER=7.
SQLSTATE=42601

set i=1
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0206N "I" 在使用它的上下文中无效。 SQLSTATE=42703

while i<10000 do INSERT INTO ashare_ordwth_12928 (rec_num, "date", "time", reff, acc, stock, bs, price, qty, status, owflag, ordrec, firmid, checkord) VALUES(i, '20070315', '09:15:00', '11A1019486', 'A354972082', '600182', 'S', '6.09','100', 'R', 'LPT', '', '',NULL)
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "BEGIN-OF-STATEMENT" 后面找到异常标记 "while i<10000
do"。预期标记可能包括:"<space>"。 SQLSTATE=42601

set i=i+1
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0206N "I" 在使用它的上下文中无效。 SQLSTATE=42703

end while end
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0104N 在 "end " 后面找到异常标记 "while"。预期标记可能包括:"JOIN
<joined_table>"。 SQLSTATE=42601

SQL0104N 在 "end " 后面找到异常标记 "while"。预期标记可能包括:"JOIN <joined_table> "。

说明:

在文本 "<文本>" 后面的指定标记处检测到 SQL 语句中或 SYSPROC.ADMIN_CMD
过程的输入命令字符串中的语法错误。"<文本>" 字段指示无效标记前面的 SQL
语句中或 SYSPROC.ADMIN_CMD 过程的输入命令字符串的 20 个字符。

作为帮助,在 SQLCA 的 SQLERRM 字段中,提供了有效标记的部分列表作为 "<标
记列表>"。此列表假设语句到该位置为止是正确的。

不能处理该语句。

用户响应:

在指定的标记区域内检查并更正语句。

sqlcode: -104

sqlstate: 42601



Lucky402 2008-12-09
  • 打赏
  • 举报
回复
谢谢所有帮回复的朋友,类型应该是没问题的,检查过了
xiongxiao 2008-12-09
  • 打赏
  • 举报
回复
日期值的类型不匹配
仔细检查各字段的赋值是否类型匹配
liyan93834183 2008-12-09
  • 打赏
  • 举报
回复
你把错误信息粘出来
Lucky402 2008-12-09
  • 打赏
  • 举报
回复
create procedure import_data()

language sql
begin
declare i int default 1;
set i=1;
while i <10000
do
INSERT INTO ashare_12928 (rec_num, date, time, reff, acc, stock, bs, price, qty, status, owflag, ordrec, firmid, checkord) VALUES(i, '20070315', '09:15:00', '1lA1019486', 'A354972082', '600182', 'S', '6.09','100', 'R', 'LPT', '', '',NULL);
set i=i+1;
end while

end


还是不行
liyan93834183 2008-12-09
  • 打赏
  • 举报
回复
set i=i+1;
Lucky402 2008-12-09
  • 打赏
  • 举报
回复
要实现大批量的插入数据是不是只能用存储过程来实现呢,我试着写了个存储过程但总是无法通过,大家帮我看下错在哪里,具体怎么修改呢

create procedure import_data()

language sql
begin
declare i int default 1;
set i=1;
while i<10000
do
INSERT INTO ashare_12928 (rec_num, date, time, reff, acc, stock, bs, price, qty, status, owflag, ordrec, firmid, checkord) VALUES(i, '20070315', '09:15:00', '1lA1019486', 'A354972082', '600182', 'S', '6.09','100', 'R', 'LPT', '', '',NULL);
set i=i+1
end while

end
xiongxiao 2008-12-09
  • 打赏
  • 举报
回复
在命令行必须这样调用
db2 call import_data()
Lucky402 2008-12-09
  • 打赏
  • 举报
回复
非常谢谢xiongxiao,已经成功完成了你教的一些操作^_^
哎,DB2好复杂啊,我一直用SQL SERVER,刚想到import_data这个存储过程已经创建成功了,所以我回到命令编辑器里面执行EXEC import_data 结果又不通过了,所以现在数据表里面还没有任何记录进去:(
xiongxiao 2008-12-09
  • 打赏
  • 举报
回复
你执行之前,要连接数据库

db2 connect to 数据库名 user 用户名 using 密码
Lucky402 2008-12-09
  • 打赏
  • 举报
回复
谢谢xiongxiao
我刚按你说的去做,在命令窗口(db2 clp -db2cooy11)
c:\program files\ibm\sqllib\bin>db2 -td@ -f c:\sql.txt
提示DB21034E 该命令被当作SQL语句来处理,因为它是无效的"命令行处理器"命令.在SQL处理期间,它返回:SQL1024N 不存在数据库连接. SQLSTATE=08003
xiongxiao 2008-12-09
  • 打赏
  • 举报
回复
结贴前,记得给贴子加点分

累死偶了

^_^
xiongxiao 2008-12-09
  • 打赏
  • 举报
回复
狂汗···

这些语句你怎么在命令窗口去执行

放到一个文件中,然后最后一个 ; 改成 @
然后再在命令窗口中执行这个文件中的语句

db2 -td@ -f 文件名

对了,你那end while后还少了个分号

假如文件名为sql.txt
内容为:
create procedure import_data()

language sql

begin

declare i int default 1;

set i=1;
while i <10000
do
INSERT INTO ashare_ordwth_12928 (rec_num, "date", "time", reff, acc, stock, bs, price, qty, status, owflag, ordrec, firmid, checkord)
VALUES(i, '20070315', '09:15:00', '11A1019486', 'A354972082', '600182', 'S', '6.09','100', 'R', 'LPT', '', '',NULL);
set i=i+1;
end while ;

end@

这个文件保存在C盘

则这样执行
db2 -td@ -f c:\sql.txt
xiongxiao 2008-12-04
  • 打赏
  • 举报
回复
for /l %%s in (1,1,200000) do db2 "insert into 表名(列1,列2···) values(值1,值2···)"
如果主键列既不是自增的,也不用序列,当然主键列必须是整形,可以这样
for /l %%s in (1,1,200000) do db2 "insert into 表名(主键列,列1,列2···) values(%%s,值1,值2···)"

将这一句保存在一个bat文件中即可
Lucky402 2008-12-03
  • 打赏
  • 举报
回复
谢谢!具体怎么写呢,能否帮写一下?
xiongxiao 2008-12-03
  • 打赏
  • 举报
回复
用自增型字段好些吧
用纯SQL的话,就写个批处理循环插入吧,不过这科似乎称不上纯了,呵呵
j2eeprogramer 2008-12-02
  • 打赏
  • 举报
回复
建一个序列 sequence
序列名.nextval 来填 num
加载更多回复(4)

5,891

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧