Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211

    [PL/SQL] procedura non valida

    salve a tutti,

    mi sto esercitando con il linguaggio pl/sql e, a tal proposito ho creato una procedura con un'eccezione definita dall'utente. secondo me la procedura è corretta sintatticamente, utilizzando toad come ambiente, questa viene compilata ma con errori di compilazione e, al momento della chiamata il codice va in errore. posto il codice:

    codice:
    truncate table ordini;
    truncate table clienti;
    
    
    create or replace function controllaFattura(pNumFattura inordini.fattura%type) return boolean is
    risultato boolean;
    begin
        if(pNumFattura in (select fattura from ordini))
        then
            risultato := true;
        else
            risultato := false;
        end if;
        
        return risultato;
    end;
    
    
    create or replace procedure raiseException(pnumFattura in ordini.fattura%type) is
        vNome varchar(20);
        vFattura number := 0;
        fattNonPresente exception;
    begin
        if controllaFattura(pnumFattura)
        then
            raise fattNonPresente;
        end if;
        
        select nome into vNome
        from clienti c join ordini o
        on c.id = o.idCliente
        where fattura = pnumFattura;
        
    exception
        when fattNonPresente then
            dbms_output.put_line('La fattura ' || pnumFattura || ' non è stata registrata.');
    end;
    
    exec raiseException(1);
    le truncate vengono eseguite per permettere alla funzione di agirse su una tabella vuota.
    in pratica l'esercizio vuole che venga sollevata l'eccezione con il comando raise, se nella tabella ordino non fosse presente una fattura con il relativo numero passato in input.

    non fate caso a come sono stati impostati i dati perchè li ho creati solo per vedere se riesco a far scattare l'eccezione.

    come mai quando poi la procedura viene eseguita ottengo il seguente errore?

    ORA-06550: line 1, column 7:
    PLS-00905: object SYS.RAISEEXCEPTION is invalid
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored

    help!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2015
    residenza
    TORINO
    Messaggi
    37
    Se scrivi più di una procedure o function, devi mettere un / dopo la fine di ciascuno.

    Ti segnalo due cose:
    Nel controllo fatturaFattura metti in where idfattura in modo che la query sia veloce, quellla in cun una subselect e disegnata male

    Nella procedure devi metter if not controllaFattura, altrimenti funzionerà al contrario.

    Ho verificato con oracle 11 e funziona bene:
    codice HTML:
    create or replace function controllaFattura(pNumFattura varchar2) return boolean is
    risultato boolean;
    begin
        if(pNumFattura in (0,3,3,5))
        then
            risultato := true;
        else
            risultato := false;
        end if;
        
        return risultato;
    end controllaFattura;
    /
    
    create or replace procedure raiseException(pnumFattura in varchar) is
        vNome varchar(20);
        vFattura number := 0;
        fattNonPresente exception;
    begin
        if not controllaFattura(pnumFattura)
        then
            raise fattNonPresente;
        end if;
        
      null;
        
    exception
        when fattNonPresente then
            dbms_output.put_line('La fattura2 ' || pnumFattura || ' non è stata registrata.');
    end raiseException;
    /
    call  raiseException(1);

Tag per questa discussione

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.