Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Oracle] Update con valore dinamico

    ciao!

    in sostanza hp questa query funzionante:
    codice:
    UPDATE 
    MOV_MAG_DETT MOV 
    SET 
    MOV.PREZZO = FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.PRZDIVISA = FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.IMPORTO = MOV.QUANTI * FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.IMPDIVISA = MOV.QUANTI * FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.SCONTO1 = ?,
    MOV.TSTP_MOD = SYSDATE,
    MOV.OPR = 'SQL' 
    WHERE 
    MOV.DITTA = 'XXL' 
    AND MOV.FVL = ' ' 
    AND MOV.NUMERAT = ? 
    AND MOV.PERIODO = ? 
    AND MOV.NUM = ? 
    AND MOV.SERIE = '01'
    ora dovrei fare una modifica in cui il valore dello sconto cambia a seconda di una select.
    una cosa del tipo:
    codice:
    UPDATE 
    MOV_MAG_DETT MOV 
    SET 
    MOV.PREZZO = FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.PRZDIVISA = FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.IMPORTO = MOV.QUANTI * FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.IMPDIVISA = MOV.QUANTI * FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC),
    MOV.SCONTO1 = (SE LA SELECT DA C LO SCONTO È 20; SE LA SELECT DA K LO SCONTO È 30),
    MOV.TSTP_MOD = SYSDATE,
    MOV.OPR = 'SQL' 
    WHERE 
    MOV.DITTA = 'XXL' 
    AND MOV.FVL = ' ' 
    AND MOV.NUMERAT = ? 
    AND MOV.PERIODO = ? 
    AND MOV.NUM = ? 
    AND MOV.SERIE = '01'
    si può fare una cosa del genere??

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ..... una modifica in cui il valore dello sconto cambia a seconda di una select.
    una cosa del tipo:
    codice:
    .........
    MOV.SCONTO1 = (SE LA SELECT DA C LO SCONTO È 20; SE LA SELECT DA K LO SCONTO È 30),
    ............
    si può fare ......
    Ho il dubbio di non avere capito la domanda. ..... Comunque:

    Costruisci una SELECT che restituisca assolutamente 1 solo record e 1 solo campo
    che abbia i valori desiderati (20 oppure 30)
    e mettila fra le parentesi al posto di quanto evidenziato in rosso
    (Nella SELECT niente PuntoEVirgila finale)

    Facci sapere
    Ultima modifica di nman; 25-04-2017 a 08:20

  3. #3
    SELECT=istruzione SQL
    - oppure -
    SELECT=menu a tendina?

  4. #4
    uhm provo a rispiegarmi.

    per fare un esempio, questa la query da dove prendo C o K:
    codice:
    SELECT
    SUBSTR(CODINT, 0, 1)
    FROM MAT_ANAG
    WHERE
    DITMAT = 'XXL'
    AND FVL = ' '
    AND NPAM = '0087';
    dove CODINT può cominciare solo con C o K.
    e NPAM lo prendo da MOV.NPAM.

    in sostanza:
    codice:
    UPDATE  
    MOV_MAG_DETT MOV  
    SET  
    MOV.PREZZO = FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC), 
    MOV.PRZDIVISA = FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC), 
    MOV.IMPORTO = MOV.QUANTI * FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC), 
    MOV.IMPDIVISA = MOV.QUANTI * FN_FSH_TROVA_PREZZO(MOV.DITTA, MOV.NPAM, 'OF', '1616', ?, '01', MOV.DATDOC), 
    MOV.SCONTO1 = ( 
        se SELECT SUBSTR(CODINT, 0, 1) FROM MAT_ANAG WHERE DITMAT = 'XXL' AND FVL = ' ' AND MOV.NPAM = '0087' ==> C allora sconto 20, 
        se SELECT SUBSTR(CODINT, 0, 1) FROM MAT_ANAG WHERE DITMAT = 'XXL' AND FVL = ' ' AND MOV.NPAM = '0087' ==> K allora sconto 30, 
    ), 
    MOV.TSTP_MOD = SYSDATE, 
    MOV.OPR = 'SQL'  
    WHERE  
    MOV.DITTA = 'XXL'  
    AND MOV.FVL = ' '  
    AND MOV.NUMERAT = ?  
    AND MOV.PERIODO = ?  
    AND MOV.NUM = ?  
    AND MOV.SERIE = '01'

  5. #5
    qualcosa del genere
    codice:
    ...
    MOV.SCONTO1 = (
       SELECT
       CASE WHEN SUBSTR(CODINT, 0, 1)='C' THEN 20
            WHEN SUBSTR(CODINT, 0, 1)='K' THEN 30
            ELSE ...decidi tu...
            END
       FROM MAT_ANAG
       WHERE
          DITMAT = 'XXL'
          AND FVL = ' '
          AND NPAM = '0087'),
    MOV.TSTP_MOD = SYSDATE, 
    ...

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.