Vorrei un esempio di codice.Come si scrive un ciclo infinito con le stored procedure di Oracle?
modifica: il codice di non stampa è stato risolto tramite l'interfaccia di gestione database.
Vorrei un esempio di codice.Come si scrive un ciclo infinito con le stored procedure di Oracle?
modifica: il codice di non stampa è stato risolto tramite l'interfaccia di gestione database.
Un ciclo senza un'istruzione EXIT è un modo per generare un ciclo infinito in PL/SQL
BEGIN
LOOP
null;
END LOOP;
END;
Si potrebbe scrivi anche un ciclo WHILE che non finisce mai
BEGIN
WHILE(true)
LOOP
NULL;
END LOOP;
END;
Non so perché si avrebbe bisogno, ma:
BEGIN
WHILE 1 = 1
LOOP
NULL;
END LOOP;
END;
Se il tuo problema è che non stai ricevendo output, allora potresti non avere nabled DBMS OUTPUT ancora. È possibile farlo con:
set serveroutput on
'DBMS_OUTPUT' con un ciclo infinito è illogico. Oracle non restituisce alcun output al client fino a quando non viene completato un comando (una query, un blocco anonimo, DDL, qualunque "unità" si sta tentando di eseguire), quindi un ciclo infinito non darebbe mai output indipendentemente dal fatto che si abilitato o meno. – jpmc26
Un anello contenente un DBMS_OUTPUT.PUT_LINE non sarà infinita (se serveroutput è attivato) come, eventualmente, riempirà l'intero buffer di uscita o la memoria disponibile. Il limite era di circa 1 milione di byte, quindi sarebbe stato colpito abbastanza rapidamente. Se va a riempire l'intera memoria del computer, ciò può richiedere un po 'di tempo.
In loop infiniti, ho attraversato un brutto momento di dimenticare di andare al prossimo elemento in un tavolo.
DECLARE
type typ_tab is table of varchar2(10) index by pls_integer;
t_tab typ_tab;
v_ind number;
BEGIN
t_tab(10) := 'A';
t_tab(20) := 'B';
v_ind := t_tab.first;
WHILE v_ind IS NOT NULL LOOP
dbms_output.put_line(t_tab(v_ind));
v_ind := t_tab.next(v_ind); --Forget this and it loops forever
END LOOP;
END;
Una volta entrati in tale ciclo, potrebbe essere necessario che la sessione venga eliminata dal DBA.
Cosa cerchi di ottenere? Non sembra molto significativo dato che normalmente si prova ad evitare di avere un loop infinito in un proc memorizzato. –
I get get output: '0 1 2 3 4 5 6 7 8 9 10 var is null' – Quassnoi
Il commento di Jay S è quasi certamente corretto qui-- è necessario abilitare il servoutput prima di chiamare il blocco PL/SQL. –