2013-02-12 5 views
0

Je dois insérer par lots certaines lignes dans une table temporaire et les supprimer par la suite. Ce dont j'ai besoin d'un identifiant unique qui peut spécifiquement identifier et supprimer les lignes qui sont insérées dans une seule transaction. Comment puis-je y parvenir?Générer des ID de lot uniques dans Oracle

Merci à l'avance

Je veux placer quelques lignes dans une table temporaire à l'aide de l'insertion de lot, l'utiliser pour faire des jointures etc avec d'autres tables de db, et supprimer les lignes après avoir été fait. Donc, une fois les données utilisées, je devrais pouvoir les supprimer. Il peut y avoir de nombreux utilisateurs utilisant cette table temporaire simultanément, j'ai donc besoin d'un ID unique pour spécifier les lignes insérées dans un seul insert afin qu'elles puissent être supprimées avec une simple instruction delete sans supprimer les lignes entrées à ce moment là delete from table where = 'xxx'

+0

Avez-vous la structure de la table temporaire, où vous avez à insérer des lignes? – Incognito

+0

Créez une séquence, puis utilisez 'seq_name.nextval' pendant l'insertion. –

+0

@a_horse_with_no_name Si je comprends bien l'OP, il veut avoir le * même * ID de lot pour toutes les lignes insérées dans une seule transaction (quelque chose comme un ID de chargement pour un processus ETL). –

Répondre

2

L'approche habituelle est d'utiliser une séquence pour générer votre ID de lot au préalable et ensuite fournir cet ID de lot à votre instruction INSERT:

create sequence seq_batchid; 

declare 
    l_BatchID number; 
begin 
    /* if you're using release 10 or earlier, use 
    select seq_batchid.nextval into BatchID from dual; 
    instead */ 
    l_BatchID := seq_batchid.nextval; 

    INSERT INTO temp_table(BatchID, ...) (SELECT l_BatchID, ...) 
end; 
0

La séquence Oracle peut fonctionner. Mais pour confirmer cela, vous devez nous donner plus d'informations sur ce que vous essayez d'accomplir. Ce serait bien si vous pouviez nous donner la structure de la table aussi.

+0

question éditée –