嗨我有一个数据库加载的列,我想插入几个记录进行测试,现在为了插入到该数据库的东西我不得不写大查询..是否有可能做这样的事情插入到oracle数据库
INSERT INTO table (SELECT FROM table WHERE id='5')
..我尝试插入ID为5的行,但我认为这会产生一个问题,因为它会尝试复制一条记录,是否有可能改变这个ID 5让它说1000然后我可以在不写数据的情况下插入数据,同时避免复制数据。tnx
嗨我有一个数据库加载的列,我想插入几个记录进行测试,现在为了插入到该数据库的东西我不得不写大查询..是否有可能做这样的事情插入到oracle数据库
INSERT INTO table (SELECT FROM table WHERE id='5')
..我尝试插入ID为5的行,但我认为这会产生一个问题,因为它会尝试复制一条记录,是否有可能改变这个ID 5让它说1000然后我可以在不写数据的情况下插入数据,同时避免复制数据。tnx
在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;
对于没有默认值的每一列或者您想要插入非默认值的列,您都需要提供明确的名称和价值。
如果要选择所有列并按原样插入,则只能使用隐式列表(*
)。
由于您要更改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
的值。
如果您对表的触发器来处理从序列的主键(:NEW.id = seq_sequence.NEXTVAL),那么你应该能够做到:
INSERT INTO表 (选择columns_needed FROM表WHERE)
这将允许您在一个行中添加多行(该数量受WHERE子句限制)。您需要选择表所需的列不为空或不具有默认值。谨防任何独特的限制。
否则你会看PL/SQL或其他形式的脚本来插入多行。