Je voudrais un exemple de code.Comment écrire une boucle infinie avec les procédures stockées d'Oracle?
edit: Le code de non-impression a été fixé via l'interface du gestionnaire de base de données.
Je voudrais un exemple de code.Comment écrire une boucle infinie avec les procédures stockées d'Oracle?
edit: Le code de non-impression a été fixé via l'interface du gestionnaire de base de données.
Une boucle sans instruction EXIT est une façon de générer une boucle infinie dans PL/SQL
BEGIN
LOOP
null;
END LOOP;
END;
Vous pourriez Également écrire une boucle WHILE qui ne se termine jamais
BEGIN
WHILE(true)
LOOP
NULL;
END LOOP;
END;
Je ne sais pas pourquoi auriez-vous besoin, mais:
BEGIN
WHILE 1 = 1
LOOP
NULL;
END LOOP;
END;
Si votre problème est que vous n'obtenez aucune sortie, alors vous ne pouvez pas avoir e DBTP SORTIE napped encore. Vous pouvez le faire avec:
set serveroutput on
'DBMS_OUTPUT' avec une boucle infinie est illogique. Oracle ne renvoie aucune sortie au client jusqu'à ce qu'une commande (une requête, un bloc anonyme, DDL, quelle que soit "l'unité" que vous essayez d'exécuter) soit terminée, donc une boucle infinie ne vous donnera jamais de sortie, que vous activé ou non. – jpmc26
Une boucle contenant un DBMS_OUTPUT.PUT_LINE ne sera pas infinie (si SERVEROUTPUT est activé) que, par la suite, il remplira toute la mémoire tampon de sortie ou la mémoire disponible. La limite utilisée pour être environ 1 million d'octets serait donc frappé assez rapidement. Si cela remplit toute la mémoire de l'ordinateur, cela peut prendre un certain temps.
Sur les boucles infinies, je suis passé par un mauvais carré d'oubli pour passer à l'élément suivant dans une table.
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;
Une fois qu'ils sont dans une telle boucle, la session peut devoir être supprimée par le DBA.
Qu'essayez-vous d'accomplir? Cela n'a pas l'air très significatif puisque normalement vous essayez d'éviter d'avoir une boucle infinie dans un proc stocké. –
Je reçois la sortie: '0 1 2 3 4 5 6 7 8 9 10 var is null' – Quassnoi
Le commentaire de Jay S est presque certainement correct ici - vous devez activer serveroutput avant d'appeler votre bloc PL/SQL. –