J'ai créé une procédure simple. Dans cette procédure, je veux sortir des données. Cependant où jamais je mets définir la sortie du serveur
ça dit
Erreur (26,5): PLS-00103: Rencontre du symbole "SERVEROUTPUT" lorsqu’un des éléments suivants est attendu:. (), * @% & = - + </> at in est un mod reste non rem => <> ou! = ou ~ => = <= <> et ou like like2 like4 comme | membre multiset sous-groupe
Peu importe où je le mets, il continue de le dire.
create or replace PROCEDURE discount
is --- signature
BEGIN --- executable part
update dvd set me_our_price = me_our_price*0.90 WHERE me_release_year = 2011;
update dvd set me_our_price = me_our_price*0.80 WHERE me_release_year = 2010;
update bluray set me_our_price = me_our_price*0.95 WHERE me_release_year = 2011;
update bluray set me_our_price = me_our_price*0.90 WHERE me_release_year = 2010;
DBMS_OUTPUT.PUT_LINE(' Blurays ');
for i in (
SELECT e.mo_title, e.mo_bluray.me_list_price as me_list_price, e.mo_bluray.me_our_price as me_our_price FROM movie e where e.mo_bluray is not null
)
loop
DBMS_OUTPUT.PUT_LINE(i.mo_title|| ' ' || i.me_list_price|| ' ' || i.me_list_price);
end loop;
DBMS_OUTPUT.PUT_LINE(' DVDs ');
for i in (
set serveroutput on
SELECT e.mo_title, e.mo_dvd.me_list_price as me_list_price, e.mo_dvd.me_our_price as me_our_price FROM movie e where e.mo_dvd is not null
)
loop
DBMS_OUTPUT.PUT_LINE(i.mo_title|| ' ' || i.me_list_price|| ' ' || i.me_list_price);
end loop;
END discount;
Pour comprendre l'utilisation de "SET SERVEROUTPUT ON", prenons un exemple.
DECLARE
a number(10) :=10;
BEGIN
dbms_output.put_line(a) ;
dbms_output.put_line('Hello World ! ') ;
END ;
Avec une sortie: la procédure PL/SQl s’est terminée avec succès sans la sortie attendue
Et la raison principale est que, quoi que nous passions à l'intérieur de dbms_output.put_line ('ARGUMENT'/VALUES), c'est-à-dire ARGUMENT/VALUES, est stocké en interne dans un tampon dans une zone de mémoire SGA (zone globale partagée) jusqu'à 2000 octets.
* NOTE: *** Toutefois, il convient de noter que ce tampon n'est créé que lorsque nous utilisons le package ** dbms_output. Et nous devons définir la variable d'environnement une seule fois pour une session!
Et pour pouvoir le récupérer dans ce tampon, nous devons définir la variable d'environnement pour la session. Il est très confus pour les débutants que nous configurions la sortie du serveur (en raison de sa nomenclature), mais malheureusement, rien de tel. Utiliser SET SERVER OUTPUT ON indique simplement au moteur PL/SQL que
* Hé, s'il vous plaît, écrivez l’ARGUMENT/LES VALEURS que je vais transmettre à dbms_output.put_line
.__ et à son tour, le moteur d’exécution PL/SQl imprime l’argument sur la console principale.
Je pense que je suis clair pour vous tous. Je vous souhaite tout le meilleur ... Pour en savoir plus avec la structure architecturale de Oracle Server Engine, vous pouvez consulter ma réponse sur Quora http://qr.ae/RojAn8
Et pour répondre à votre question "Il faut utiliser SET SERVER OUTPUT au début de la session."
"SET serveroutput ON" est une commande SQL * Plus et n'est pas valide PL/SQL.
Ajoutez d'abord le code suivant dans votre sp:
BEGIN
dbms_output.enable();
dbms_output.put_line ('TEST LINE');
END;
Compilez votre code dans votre développeur Oracle SQL. Alors allez dans la vue Menu -> sortie dbms. Cliquez sur Icon Green Plus et sélectionnez votre schéma. Lance ton sp maintenant.
If you want to execute any procedure then firstly you have to set serveroutput on in the sqldeveloper work environment like.
-> SET SERVEROUTPUT ON;
-> BEGIN
dbms_output.put_line ('Hello World..');
dbms_output.put_line('Its displaying the values only for the Testing purpose');
END;
/
En fait, vous devez appeler SET SERVEROUTPUT ON;
avant l'appel BEGIN
.
Tout le monde a suggéré cela, mais ne donne aucun conseil sur l'endroit où placer réellement la ligne:
SET SERVEROUTPUT ON;
BEGIN
FOR rec in (SELECT * FROM EMPLOYEES) LOOP
DBMS_OUTPUT.PUT_LINE(rec.EmployeeName);
ENDLOOP;
END;
Sinon, vous ne verrez aucune sortie.