2009-10-19 12 views
2

Salut J'ai une base de données avec des charges de colonnes et je veux insérer quelques enregistrements pour les tests, maintenant pour insérer quelque chose dans cette base de données, je devrais écrire une grande requête .. est-il possible de faire quelque chose comme çaInsérer dans la base de données oracle

INSERT INTO table (SELECT FROM table WHERE id='5') .. J'essaie d'insérer la ligne avec ID 5 mais je pense que cela va créer un problème car il va essayer de dupliquer un enregistrement, est-il possible de changer cet ID 5 pour dire 1000 puis Je serais capable d'insérer des données sans écrire de requête complexe et tout en évitant la réplication des données .. tnx

Répondre

4

En PL/SQL que vous pouvez faire quelque chose comme ceci:

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

Pour chaque colonne qui n'a pas de valeur par défaut ou que vous voulez insérer les valeurs autres que la valeur par défaut, vous aurez besoin pour fournir le nom explicite et la valeur.

Vous ne pouvez utiliser une liste implicite (*) que si vous souhaitez sélectionner toutes les colonnes et les insérer telles quelles. Comme vous modifiez PRIMARY KEY, vous devez énumérer.

Toutefois, vous pouvez créer un déclencheur avant la mise à jour et modifier la valeur du PRIMARY KEY dans ce déclencheur.

Notez que le déclencheur ne peut pas faire référence à la table elle-même, de sorte que vous devrez fournir une autre façon d'obtenir le numéro unique (comme une séquence):

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

De cette façon, vous pouvez utiliser l'astérisque mais remplacera toujours la valeur du PRIMARY KEY.

0

Si vous avez un déclencheur sur la table pour gérer la clé primaire d'une séquence (: NEW.id = seq_sequence.NEXTVAL), alors vous devriez être en mesure de le faire:

INSERT INTO table (SELECT columns_needed DE table WHERE quel que soit)

Cela vous permettra d'ajouter plusieurs lignes en une (le nombre étant limité par la clause WHERE). Vous devez sélectionner les colonnes requises par la table pour qu'elles ne soient pas nulles ou ne contiennent pas de valeurs par défaut. Méfiez-vous de toutes les contraintes uniques.

Sinon, vous utiliserez PL/SQL ou une autre forme de script pour insérer plusieurs lignes.

Questions connexes