我有一张这样的桌子。
create table help(
id number primary key,
number_s integer NOT NULL);
我必须从id 1和id 915插入值0,我用一种简单的方法解决了这个问题
update help set number_s=0 where id<=915;
这很容易。 现在,我必须设置一个从id 915到最后一行的数字(每行都会更改)。 我在做
update help set number_s=51 where id=916;
update help set number_s=3 where id=917;
有超过1.000的行需要更新,我该如何快速完成? 当我遇到这个问题时,我曾经使用序列来自动增加id等值(示例
insert into help(id,number_s) values (id_sequence.nextval,16);
insert into help(id,number_s) values (id_sequence.nextval,48);
以此类推,但是在这种情况下不能使用,因为在这种情况下,id从915开始,而不是1 ...)我怎么能很快呢?我希望问题很清楚。
答案 0 :(得分:0)
由于您的ID和数字在一个结构简单的文件中,因此这是一个相当小的数字,假设您要一次这样做,说实话我会做的是将文件拖入Excel,使用文本功能构建1000条插入语句,然后将其剪切并粘贴到任何地方。
如果这些假设不正确,您可以(1)使用sqlldr将该文件加载到临时表中,并且(2)根据以下情况在update
表上运行help
该临时表中的行。
答案 1 :(得分:0)
如先前的回答所述,并根据您的评论说,系统中存储了一个文件,您可以使用external table / SQL loader
来获得结果。
我正尝试向您展示该演示,如下所示:
-- Create an external table pointing to your file
CREATE TABLE "EXT_SEQUENCES" (
"ID" number ,
"number_s" number
)
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "<directory name>" ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
BADFILE 'bad_file.txt'
LOGFILE 'log_file.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' MISSING FIELD VALUES ARE NULL
) LOCATION ( '<file name>' )
) REJECT LIMIT UNLIMITED;
-- Now update your help table
MERGE INTO help H
USING EXT_SEQUENCES
ON ( H.ID = E.ID)
WHEN MATCHED THEN
UPDATE SET H.number_s = E.number_s;
注意:您需要根据文件中的实际数据更改外部表的访问参数。
希望您现在会获得正确的指导。
干杯!