2009-12-06 4 views
35

J'utilise Oracle édition 10g express. Il a un bon interface utilisateur pour les développeurs db. Mais je suis confronté à des problèmes d'exécution des procédures stockées.Comment exécuter une procédure stockée Oracle?

Procédure:

create or replace procedure temp_proc is 
begin 
    DBMS_OUTPUT.PUT_LINE('Test'); 
end 

il est créé avec succès. Mais quand j'exécuter:

execute temp_proc;

il montre ORA-00900: instruction SQL invalide

Alors aide nécessaire ici

+1

C'est valable pour SQLPlus - comment essayez-vous de l'exécuter? –

+0

Commencez par "Aller à la page d'accueil de la base de données", puis par Accueil> SQL> Commandes SQL. Ensuite, créez une procédure, puis exécutez. – FlintOff

+0

Quel logiciel utilisez-vous? –

Répondre

51

Execute est SQL * Plus syntaxe .. Essayez d'envelopper votre appel à commencer .. finir comme ça:

begin 
    temp_proc; 
end; 

(Bien que Jeffrey dit que cela ne fonctionne pas dans l'APEX .. mais vous essayez de exécutez ceci dans SQLDeveloper.)

+2

Cela fonctionne totalement dans APEX. Je viens de vérifier. – InamTaj

-1

Avez-vous essayé de corriger la syntaxe comme ceci ?:

create or replace procedure temp_proc AS 
begin 
    DBMS_OUTPUT.PUT_LINE('Test'); 
end; 
+4

'IS' devrait être correct. – Thorsten

+1

Ce que je vois, c'est que vous venez de changer IS à AS et ajouté un point-virgule à la fin du mot-clé «fin». Bien que l'ajout de point-virgule soit bon, mais OP dit que la compilation a réussi, ce qui ne peut pas être le problème. Le problème est que OP ne savait pas comment exécuter proc qui ont déjà été adressées correctement dans la réponse acceptée. Donc, cette réponse est fausse. – nanosoft

3

Oracle 10g Express Edition est livré avec Oracle Application Express (Apex) intégré. Vous l'exécutez dans sa fenêtre SQL Commands, qui ne prend pas en charge la syntaxe SQL * Plus.

Cela n'a pas d'importance, car (comme vous l'avez découvert) la syntaxe BEGIN ... END fonctionne dans Apex.

2

'is' et 'as' sont des syntaxes valides. La sortie est désactivée par défaut. Essayez une procédure qui permet également la sortie ...

create or replace procedure temp_proc is 
begin 
    DBMS_OUTPUT.ENABLE(1000000); 
    DBMS_OUTPUT.PUT_LINE('Test'); 
end; 

... et l'appeler dans un bloc de PLSQL ...

begin 
    temp_proc; 
end; 

... comme SQL est non procédural.

0
begin 
    temp_proc; 
end; 

Je veux vous rappeler que « temp_proc » doit être synonyme ...

Questions connexes