插入oracle数据库

时间:2009-10-19 12:48:17

标签: oracle oracle10g

您好我有一个包含大量列的数据库,我想插入几条记录进行测试,现在为了在该数据库中插入一些东西,我必须编写大型查询..是否有可能做这样的事情

INSERT INTO table (SELECT FROM table WHERE id='5') ..我尝试插入ID为5的行,但我认为这会产生问题,因为它会尝试复制一条记录,是否可以更改此ID 5来说1000然后我能够在不编写复杂查询的情况下插入数据,同时避免复制数据.. tnx

3 个答案:

答案 0 :(得分:4)

在PL / SQL中你可以这样做:

declare
  l_rec table%rowtype;
begin
  select * into l_rec from table where id='5';
  l_rec.id := 1000;
  insert into table values l_rec;
end;

答案 1 :(得分:0)

对于没有默认值的每个列,或者您希望插入默认值以外的值,您需要提供显式名称和值。

如果要选择所有列并按原样插入,则只能使用隐式列表(*)。

由于您要更改PRIMARY KEY,因此需要枚举。

但是,您可以创建更新前触发器并更改此触发器中PRIMARY KEY的值。

请注意,触发器无法引用表本身,因此您需要提供一些其他方法来获取唯一编号(如序列):

CREATE TRIGGER trg_mytable_bi BEFORE INSERT ON mytable FOR EACH ROW
BEGIN
    :NEW.id := s_mytable.nextval;
END;

这样您就可以使用星号,但它总是会替换PRIMARY KEY的值。

答案 2 :(得分:0)

如果您在表上有一个触发器来处理序列中的主键(:NEW.id = seq_sequence.NEXTVAL),那么您应该可以这样做:

INSERT INTO表 (SELECT columns_needed FROM table WHERE what)

这将允许您在一个地方添加许多行(数量受WHERE子句限制)。您需要选择表所需的列不为null或没有默认值。请注意任何独特的限制。

否则,您将查看PL / SQL或其他形式的脚本以插入多行。