ciao a tutti, sto facendo una procedura che, in una database con una tabella chiamata parlamentari con campi nome, cognome, legislatura, ecc ecc, deve stampare il numero di legislature in cui un parlamentare passato in input è stato sia deputato che senatore, in caso il parlamentare non fosse presente nella tabella deve sollevare un'eccezione. io ho fatto la mia procedura in questo modo:
codice:
create or replace PROCEDURE STAMPALEGISLATURE
(
NOMEP IN VARCHAR2,
COGNOMEP IN VARCHAR2
) AS
CURSOR c1 IS
SELECT legislatura, count(*)
FROM repositoryadm.parlamentari
WHERE ((nome = NOMEP) and (cognome = COGNOMEP) and (tipo = 'd'))
GROUP BY legislatura;
CURSOR c2 IS
SELECT legislatura, count(*)
FROM repositoryadm.parlamentari
WHERE ((nome = NOMEP) and (cognome = COGNOMEP) and (tipo = 's'))
GROUP BY legislatura;
deputato c1%rowtype;
senatore c2%rowtype;
counterdep integer(2) := 0;
countersen integer(2) := 0;
parlam_not_found EXCEPTION;
BEGIN
IF((NOMEP NOT IN(SELECT nome FROM repositoryadm.parlamentari)) OR (COGNOMEP NOT IN(SELECT cognome FROM repositoryadm.parlamentari))) THEN
RAISE parlam_not_found;
ELSE
OPEN c1;
LOOP
FETCH c1 INTO deputato;
EXIT WHEN c1%notfound;
counterdep := counterdep + 1;
END LOOP;
CLOSE c1;
OPEN c2;
LOOP
FETCH c2 INTO senatore;
EXIT WHEN c2%notfound;
countersen := countersen + 1;
END LOOP;
CLOSE c2;
dbms_output.put_line('il parlamentare ' || NOMEP || ' ' || COGNOMEP || ' è stato deputato per ' || counterdep || ' volte e');
dbms_output.put_line('senatore per ' || countersen || ' volte.');
END IF;
EXCEPTION
WHEN parlam_not_found THEN
dbms_output.put_line('parlamentare non esistente.');
ROLLBACK;
END STAMPALEGISLATURE;
premetto che se lascio solo il blocco ELSE, mi dà i risultati che richiedo ma fornisce il valore 0 se il parlamentare non è presente nel DB. per far sì che venga sollevata l'eccezione bisogna mettere anche il blocco IF.
a questo punto l'errore che mi viene visualizzato è il seguente:
Errore(27,19): PLS-00405: query secondaria non ammessa in questo contesto
precisamente dove c'è la condizione dell'IF.
come posso fare a controllare se i valori nomep e cognomep sono presenti nella tabella parlamentari???