Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181

    [ORACLE] Esiste un autoincrement che non salti dei numeri?

    salve ragazzi, voglio creare una tabella con la chiave che si autoincrementi.
    Cercando un po con google ho visto che esistono diversi metodi e ne ho provati due che hanno lo stesso difetto. In pratica se eseguo solo inserimenti funzionano bene, appena elimino uno o piu records al prossimo inserimento l'autoincrement salta diversi numeri.

    Esempio:ho 7 records, ne elimino uno e inserisco un nuovo record. L'autoincrement dovrebbe settarmi la chiave a 8 invece setta 20

    Credo sia un problema di cache di oracle, sapete aiutarmi a risolvere il problema?
    posto il codice usato:

    Codice PHP:
    //CREO SEQUENZA

    create sequence NOMETABELLA_seq 
    start with 1 
    increment by 1 
    nomaxvalue



    //CREO TRIGGER
    create trigger NOMETABELLA_trigger
    before insert on NOMETABELLA
    for each row
    begin
    select NOMETABELLA_seq
    .nextval into :new.id from dual;
    end

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Devi resettare l'identity seed
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    cioè dovrei usare questo codice ogni volta che rimuovo un record?

    Codice PHP:
    DELETE [myTable] -- assuming you want to clear the data 
    DBCC CHECKIDENT
    ('myTable'RESEED0
    In poche parole se ho 7 records e elimino il settimo e ad esempio voglio che il prossimo record inserito abbia ID pari a 7 dovrei scrivere:

    DELETE [myTable] -- assuming you want to clear the data
    DBCC CHECKIDENT('myTable', RESEED, 6 )

    giusto?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    ragazzi ho notato che il salto dei numero non è legato alla rimozione, infatti oggi ho provato a fare un inserimento e ha saltato dei numeri. Come può essere? Qualcuno mi puo postare il suo codice funzionante per confrontarlo col mio?

    forse ho capito qual'è il problema! In pratica siccome sto testando una insert nella tabella capita che qualche insert non venga eseguita a causa di errori. La sequenza di oracle si incrementa anche in caso di errore nella insert. Può essere questo il problema?

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    dai, non ci credo che nessuno mi sa aiutare, up

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    c'è un limite agli up?

  8. #8
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Guarda, non conosco Oracle ma ho un dubbio di fondo...

    Hai inserito 6 record, con gli ID che vanno da 1 a 6
    Cancelli il record che ha ID = 6
    Ne inserisci uno nuovo che venisse riassegnato il numero 6
    Per fare questo come ti è stato detto, devi resettare l'identity seed

    Hai inserito 6 record, con gli ID che vanno da 1 a 6
    Cancelli il record che ha ID = 3
    Ne inserisci un altro...
    Che ID deve avere ? Il numero 3 (devi quindi "riempire il buco" ?)
    O vuoi aggiornare tutto gli altri per "chiudere il buco" ?

    In ogni caso l'ID autoincrementante è fatto proprio per assegnare ID univoci ai nuovi record, e poco importa se non sono davvero tutti consecutivi
    Se vuoi gestirla in maniera diversa lo devi fare tu "manualmente" (metti un campo che non sia autoincrementante e ne importi tu il valore, per esempio con un trigger eseguito dopo l'inserimento...)

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    calcola che a me non interesserebbe eliminare righe nella tabella, ma anche se dovessi eliminarle mi andrebbe bene che oracle assegnasse il numero successivo all'ultimo assegnato e non uno casuale. ES: se ho 6 records con id da 1 a 6 ed elimino il terzo quando ne aggiunto un altro voglio che abbia id 7 e non 8 12 34 ecc

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.