Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    27

    Oracle-plsql Cilci Innestati Con Due Cursori

    ciao ragazzi ho un problema... stò creando un trigger che deve usufruire di due cursori e quindi su questi due cursori fare due controlli diversi mmmm che dovrei usare? un loop innestato o un singolo loop che gestisca i due cursori con i rispettivi controlli??? AIUTO VVoVe: VVoVe:

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Dipende se ti serve che i for siano innestati o no: se in C devo leggere i valori di una matrice sono "costretto" a ricorrere a due for annidati, ma se devo leggere due vettori distinti e separati mi servirò di altrettanti cicli distinti e separati...

    cosa devi fare precisamente in questo trigger?

    Non ti assicuro di essere in grado di aiutarti perché non ho molta esperienza col PL/SQL, ma qualcosa la so, d'altra parte non mi sembra che sul forum ci siano molti altri che conoscano il linguaggio, essendo un'estensione proprietaria di Oracle che non so perché in alcune università si dilettano tanto di insegnare...

    [ot]Sei di informatica della Parthenope di Napoli per caso? Non saresti il primo...[/ot]
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    27
    ciao si in effetti sn della parthenope infatti ricordo il tuo nick dal forum dell'uni...
    cmq.... in pratica dovrei fare un trigger che mi gestisca l'inserimento degli eventi nella mia videoteca e cioè mi controlla se la data dell'evento è valida cioè se non è minore di sysdate poi se la data non è già occupata e poi controlla se ci sono già 2 eventi nella videoteca in questione(la mia è una catena di videoteca) e nel caso inserisce l'evento in una videoteca che ha meno impegni mensili.... VVoVe:
    in pratica volevo usare due cursori in uno stesso loop ma mi sono accorto che non ne avevo il bisogno xkè un cursore lo uso per cercare nella videoteca una stessa data di quella che voglio inserire ma in ogni caso ho un errore di esecuzione VVoVe:
    ti posto il codice anche se sò che sarà un casino per te capire il tutto..

    [code]
    create or replace trigger g
    before insert on EVENTI
    for each row
    declare
    data_occupata EVENTI.DATA_EVENTO%TYPE;
    videoteca_impegnata_mese EVENTI.PI%TYPE;
    videoteca_libera_mese EVENTI.PI%TYPE;

    cursor troppi_eventi_mese is select PI from eventi where to_char(DATA_EVENTO,'MON')=to_char(sysdate,'MON') group by PI having count(PI)>2;
    cursor data_gia_impegnata is select DATA_EVENTO from EVENTI where DATA_EVENTO=:new.DATA_EVENTO and PI=:new.PI;
    data_non_valida exception;
    data_non_disponibile exception;
    begin

    select distinct PI into videoteca_libera_mese from EVENTI where to_char(DATA_EVENTO,'mon')=to_char(:new.DATA_EVENT O,'mon') group by PI having count(PI)<=ALL(select count(PI) from EVENTI where to_char(DATA_EVENTO,'mon')=to_char(:new.DATA_EVENT O,'mon') group by PI);
    if(:new.DATA_EVENTO<=sysdate) then
    raise data_non_valida;
    end if;
    open data_gia_impegnata;
    fetch data_gia_impegnata into data_occupata;
    if (data_gia_impegnata%ROWCOUNT>0)then
    raise data_non_valida;
    end if;
    close data_gia_impegnata;
    open troppi_eventi_mese;

    fetch troppi_eventi_mese into videoteca_impegnata_mese;
    loop
    if(:new.PI=videoteca_impegnata_mese) then
    insert into EVENTI(PI) values(videoteca_libera_mese);

    end if;
    fetch troppi_eventi_mese into videoteca_impegnata_mese;
    exit when troppi_eventi_mese%NOTFOUND;
    end loop;
    close troppi_eventi_mese;
    exception
    when data_non_valida then
    raise_application_error('-20008','DATA NON VALIDA!');
    when data_non_disponibile then
    raise_application_error('-20006','DATA_OCCUPATA!');
    end;
    /
    [\code]

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    27
    vabbè cmq risolto todo

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.