插入各种值

时间:2019-07-15 20:21:52

标签: sql oracle sql-insert

我有一张这样的桌子。

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 ...)我怎么能很快呢?我希望问题很清楚。

2 个答案:

答案 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;

注意:您需要根据文件中的实际数据更改外部表的访问参数。

希望您现在会获得正确的指导。

干杯!