Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema Procedure SQL

  1. #1

    Problema Procedure SQL

    Salve a tutti...sono nuova nel forum...ho un problema cn questa procedure sql:


    create or replace procedure "RIPRISTINA_REAGENTI" (cod_reazione NUMBER, fattore NUMBER) as
    begin
    DECLARE
    cod REAGENTE.COD_SOSTANZA%TYPE;
    moli REAGENTE.NUM_MOLI%TYPE;

    CURSOR c1 IS
    SELECT COD_SOSTANZA, NUM_MOLI
    FROM REAGENTE
    WHERE COD_REAZIONE = cod_reazione;

    BEGIN OPEN c1;
    LOOP
    FETCH c1 INTO cod, moli;
    EXIT WHEN c1%NOTFOUND;
    UPDATE SOSTANZA SET QUANTITA = QUANTITA + fattore*moli WHERE CODICE = cod;
    END LOOP;
    CLOSE CURSORE;
    END;
    end;


    Il problema è che l'update non avviene solo dove "CODICE = cod" ma viene aggiornato "QUANTITA" su tutte le tutte le righe della tabella.

    Spero che qualcuno mi sappia dire qualcosa....GRAZIE

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633

    Re: Problema Procedure SQL

    Originariamente inviato da partygirl85
    CURSOR c1 IS
    SELECT COD_SOSTANZA, NUM_MOLI
    FROM REAGENTE
    WHERE COD_REAZIONE = cod_reazione;
    A mio avviso il problema è nella where condition che usi in questo cursore. Utilizzando per la variabile lo stesso nome del campo, alcuni motori DB interpretano in maniera di identità i campi della where condition. L'effetto è una completa full-scan della tabella e, di conseguenza, l'aggiornamento di tutte le sue righe.

    Prova ad utilizzare un nome diverso per la variabile.
    A presto,
    ciao
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Aggiungerei anche che questo non mi sembra corretto

    codice:
    ...
    begin
    DECLARE 
    ...
    la sezione delle dichiarazioni dovrebbe essere separata da quella del codice, quindi teoricamente dovresti scrivere

    codice:
    DECLARE
    ..
    --dichiarazioni
    ..
    BEGIN
    ..
    --codice
    ..
    E ancora

    codice:
    ...
    LOOP
    FETCH c1 INTO cod, moli; 
    ...
    Sicuro che questa scrittura sia corretta?
    every day above ground is a good one

  4. #4

    Re: Re: Problema Procedure SQL

    Originariamente inviato da standard
    A mio avviso il problema è nella where condition che usi in questo cursore. Utilizzando per la variabile lo stesso nome del campo, alcuni motori DB interpretano in maniera di identità i campi della where condition. L'effetto è una completa full-scan della tabella e, di conseguenza, l'aggiornamento di tutte le sue righe.

    Prova ad utilizzare un nome diverso per la variabile.
    A presto,
    ciao
    GRAZIE MILLE !!! Era proprio questo il problema...

    ciaoooo

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.