2009-10-05 8 views
0

J'ai un fichier SQL qui contient une procédure simple d'imprimer « Salut » comme,Course à pied Oracle procédure stockée

CREATE OR REPLACE PROCEDURE skeleton 
IS 
BEGIN 
    DBMS_OUTPUT.PUT_LINE('Hi'); 
END; 

Lorsque je tente d'exécuter ce à partir du fichier sql lui-même, il devient juste compilé et il n'est pas fonctionnement.

J'ai ajouté que,

CREATE OR REPLACE PROCEDURE skeleton 
IS 
BEGIN 
    DBMS_OUTPUT.PUT_LINE('Hi'); 
END; 
//* this is required else it throws me compilation error*/ 
set serveroutput on 
EXECUTE skeleton; 

J'ai essayé d'appeler le même squelette d'un autre fichier sql aussi et même de l'interface graphique de sqldeveloper, qui a également na pas exécuter cela. Seule la ligne de commande sqlplus m'aide. Faites-moi savoir ce qui me manque et la solution pour cela.

Répondre

0

Dans SQL Developer, vous avez besoin du bouton "exécuter script" qui est le deuxième bouton en haut à gauche (petite flèche verte devant le document) au lieu de celui avec la grande flèche verte.

Cela m'a jeté la première fois que je l'ai utilisé.

SQL Developer

La raison pour laquelle votre premier exemple sera compilé et ne fonctionne pas, est que vous n'êtes pas vraiment lui demander de courir. Vous créez une procédure dans la base de données, qui fonctionne correctement mais ne l'appelle pas. Dans votre deuxième bloc, vous avez un EXECUTE qui est où il fonctionne réellement.

+0

Vous avez raison au sujet de la « petite flèche verte devant le document », mais cela s'appelle "exécuter le script". –

+0

Merci! Je n'ai pas de copie du développeur SQL sur cette machine, j'essayais de me souvenir exactement de ce qui s'appelait. J'ai mis à jour ma réponse. –

0

Essayez de définir l'option serveroutput avant le paramètre dbms_output.

+0

Je ne pense pas que cela fonctionnera. 'set serveroutput on' n'est pas valide ici. De plus, je ne pense pas que 'set serveroutput on' soit réellement requis, au moins pour SQL Developer; ce sera de toute façon. –

2

Voici les étapes de mon travail en utilisant SQL Plus

SQL> CREATE OR REPLACE PROCEDURE skeleton 
    2 IS 
    3 BEGIN 
    4 DBMS_OUTPUT.PUT_LINE('Hi'); 
    5 END; 
    6/

Procedure created. 

SQL> set serveroutput on 
SQL> EXECUTE skeleton; 
Hi 

PL/SQL procedure successfully completed. 

SQL> 

Pouvez-vous commencer une nouvelle session sqlplus reproduire ces étapes et afficher le contenu?

+0

Il a dit qu'il peut déjà l'exécuter dans une session interactive sqlplus, il était juste coincé en cours d'exécution dans le développeur SQL et à partir d'un fichier. –

+0

@Colin - Mon mauvais! Incroyable ce qui se passe quand vous lisez la question plus d'une fois. Merci –

1

La seule modification que j'ai dû apporter à votre SQL pour permettre son exécution en tant que @file était de supprimer le commentaire. Ceci est tout le contenu du fichier sql:

CREATE OR REPLACE PROCEDURE skeleton 
IS 
BEGIN 
    DBMS_OUTPUT.PUT_LINE('Hi'); 
END; 
/
set serveroutput on 
EXECUTE skeleton; 

Vous devriez obtenir un quelque chose comme de sortie ceci:

C:\Temp>sqlplus username/password @skeleton.sql 

SQL*Plus: Release 11.1.0.6.0 - Production on Mon Oct 5 17:10:46 2009 

Copyright (c) 1982, 2007, Oracle. All rights reserved. 

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

Procedure created. 

Hi 

PL/SQL procedure successfully completed. 

SQL> 
Questions connexes