Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [SQL] UPDATE campo con valore non negativo

    Ciao a tutti,

    ho una query che serve a decrementare il valore di un campo dinamicamente:

    UPDATE PRODOTTI SET Available = Available-#Quantita# WHERE CODE = '#CODE#'

    #Quantita# potrebbe anche essere superiore ad Available quindi la sottrazione darebbe un numero negativo.
    Nessun problema tranne che non vorrei inserire un numero negativo ma 0.

    Utilizzo spesso la funzione NVL(campo,valore) dove se "campo" è NULL viene restituito "valore",
    questo però riguarda lo statement SELECT
    Tipo:
    SELECT NVL(MAX(ID),'0') + 1 AS LAST_ID FROM Table

    questa query seleziona l' ID con valore maggiore e gli addiziona 1,
    nel caso nella tabella non ci fosse ancora nessun record, MAX(ID) restituirebbe NULL quindi
    NVL lo convertirebbe in '0' ovvero 0+1=1 e non NULL, formula classica dell'autoincrement.

    Esiste qualcosa che faccia al mio caso?

    Grazie e ciao
    Luigi
    Bit Manent, Scripta Volant.
    www.bitmanent.com

  2. #2
    basta definire il campo come UNSIGNED per evitare i numeri negativi.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    scusate ma non ho detto che il DB è Oracle e quindi non ha l'attributo UNSIGNED


    c'è un'altra soluzione?

    ciaoe grazie
    luigi
    Bit Manent, Scripta Volant.
    www.bitmanent.com

  4. #4
    Bit Manent, Scripta Volant.
    www.bitmanent.com

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non conosco Oracle, ma sei sicuro che non ti permetta di usare le stesse funzioni anche per una insert o update?

  6. #6
    Quali stesse funzioni?
    UNSIGNED è un'attributo che si può dare alle tabelle di tipo numerico,
    in mysql di scuro in altri db non so, in oracle no.
    Bit Manent, Scripta Volant.
    www.bitmanent.com

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: [SQL] UPDATE campo con valore non negativo

    Originariamente inviato da Bitluigi

    Utilizzo spesso la funzione NVL(campo,valore) dove se "campo" è NULL viene restituito "valore",
    intendevo queste

  8. #8
    NVL(campo,valore) la posso utilizzare anche in UPDATE e penso anche in INSERT,
    solo che non fa al caso mio, un numero negativo non è NULL.
    Bit Manent, Scripta Volant.
    www.bitmanent.com

  9. #9
    Non ho sottomano un db oracle per provare (ormai da anni), ma mi pare che sia possibile usare CHECK per definire i valori inseribili in un campo.

    es nella definizione della tabella...

    campo NUMBER(6) CHECK (campo >= 0)

    oppure l'uso di if oppure case per l'update ...

    campo = campo - case when campo - #value# < 0 then campo

    non ricordo l'esatta sintassi da usare, per l'insert non ci dovrebbero essere problemi di numeri negativi ovviamente.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    si, ho provato con CHECK che è un constrain quindi se il valore è negativo restituisce un'errore,
    CASE WHEN l'ho provato in mille modi ma va sempre in errore, evidentemente sbaglio la sintassi o non è possibile con l'UPDATE
    Bit Manent, Scripta Volant.
    www.bitmanent.com

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 © 2024 vBulletin Solutions, Inc. All rights reserved.