嗨我有一個數據庫加載的列,我想插入幾個記錄進行測試,現在爲了插入到該數據庫的東西我不得不寫大查詢..是否有可能做這樣的事情插入到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或其他形式的腳本來插入多行。