Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    47

    [ORACLE] Creazione procedura PL/SQL

    Sto cercando di creare una procedura in oracle PL/SQL che deve far vedere un elenco di persone (parlamentari in questo caso), e numerare le tuple risultanti.
    Nella tabella parlamentari ci dovrebbero essere tutti i parlamentari che sono stati eletti nelle varie legislature (io voglio solo quelli eletti nell'ultima legislatura ed ecco perché il motivo della select annidata).
    In fase di esecuzione, tuttavia, viene fornito il seguente elenco di errori
    codice:
    Error(5,3): PL/SQL: SQL Statement ignored
    Error(12,3): PL/SQL: ORA-00936: missing expression
    codice:
    create or replace
    procedure elencoparlamentari as
    begin
    
      select
        cf, 
        nome, 
        cognome,
        legislatura
      from  
        parlamentari p, 
        mandati m 
      where 
        p.cf = m.parlamentare AND m.legislatura= (select
        max(legislatura) "m" 
      from 
        mandati);
    end elencoparlamentari;
    Ultima modifica di capcla; 23-06-2018 a 14:04 Motivo: Modifica titolo discussione

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    47
    Ho scritto una nuova versione della procedura ed ho superato i due errori precendenti
    codice:
    create or replace
    procedure elencoparlamentari(o_cf in out parlamentari.cf%type, o_name in out 
    parlamentari.nome%type, o_cognome in out parlamentari.cognome%type,
    o_legislatura in out mandati.legislatura%type) as
    begin
    
      select cf, nome, cognome, legislatura
      into o_cf, o_name, o_cognome, o_legislatura
      
      from  
        parlamentari p, 
        mandati m 
      where 
        p.cf = m.parlamentare AND m.legislatura= (select
        max(legislatura) "m" 
      from 
        mandati);
    end elencoparlamentari;
    Ora però, in fase di debug, mi escono altri errori
    codice:
    ORA-01422: exact fetch returns more than requested number of rows
    ORA-06512: at "PARLAMENTO2018.ELENCOPARLAMENTARI", line 6
    ORA-06512: at line 12

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    47
    Ho trovato la soluzione al problema:
    codice:
    reate or replace PROCEDURE parlamentarieslist
    AS
    BEGIN
      FOR c IN
      (SELECT rownum,
        p.cf,
        p.nome,
        p.cognome
      FROM parlamentari p,
        mandati m
      WHERE p.cf = m.parlamentare
      AND m.legislatura =
        (SELECT MAX(legislatura) "m" FROM mandati)
      )
      LOOP
        dbms_output.put_line('n°'||c.rownum||' CF : '||c.cf||' Cognome : '||c.cognome|| ' Name : '||c.nome);
      END LOOP;
    END parlamentarieslist;

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