2009-10-19 209 views
2

嗨我有一個數據庫加載的列,我想插入幾個記錄進行測試,現在爲了插入到該數據庫的東西我不得不寫大查詢..是否有可能做這樣的事情插入到oracle數據庫

INSERT INTO table (SELECT FROM table WHERE id='5') ..我嘗試插入ID爲5的行,但我認爲這會產生一個問題,因爲它會嘗試複製一條記錄,是否有可能改變這個ID 5讓它說1000然後我可以在不寫數據的情況下插入數據,同時避免複製數據。tnx

回答

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; 
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的值。

0

如果您對錶的觸發器來處理從序列的主鍵(:NEW.id = seq_sequence.NEXTVAL),那麼你應該能夠做到:

INSERT INTO表 (選擇columns_needed FROM表WHERE)

這將允許您在一個行中添加多行(該數量受WHERE子句限制)。您需要選擇表所需的列不爲空或不具有默認值。謹防任何獨特的限制。

否則你會看PL/SQL或其他形式的腳本來插入多行。