2010-09-23 3 views
0

Quelqu'un peut-il expliquer comment voir les résultats d'une procédure, tout fonctionne bien et le code est valide, exécuté et compilé sans erreurs. Maintenant, comment puis-je voir les résultats en tant que requête ou quoi que ce soit.Comment afficher/vérifier un résultat de procédure?

La procédure ex concerne la somme du salaire.

CREATE OR REPLACE PROCEDURE HR.TOTAL_SALARY AS  
    total_salary NUMBER(12,2);  
BEGIN  

    SET TRANSACTION READ ONLY;  

    SELECT SUM (salary) 
    INTO total_salary 
    FROM employees;  

    DBMS_OUTPUT.PUT_LINE('Total salary 1: ' || total_salary);  
    COMMIT;  

END; 
+0

Je ne comprends pas ce que vous entendez par vouloir « voir les résultats que la requête ou quoi que ce soit » . La procédure remplit une variable et l'affiche à l'écran. Que devez-vous voir de plus? Le 'COMMIT' est inutile; vous n'insérez, ne mettez pas à jour ou ne supprimez pas de données. –

+0

Mais comment puis-je voir si cela fonctionne? "Imprime à l'écran"? Je veux juste voir la somme totale du salaire qui devrait être 691400 ... –

+0

Oui, le 'DBMS_OUTPUT.PUT_LINE' affichera" Total salary 1: 691400 "à l'écran. IIRC, DBMS_OUTPUT était sous un onglet différent dans PLSQLDeveloper ... –

Répondre

0

Pour afficher les résultats d'une instruction select dans une procédure, vous devez utiliser un curseur.

create procedure myproc 
(in_variable IN number, out_records OUT sys_refcursor) 
as 
begin 
open out_records for 

select * from mytable 
where column = in_variable; 

end; 

puis de l'utiliser, de déclarer le curseur, d'exécuter le proc et de sortir les résultats.

variable records refcursor; 
exec myproc(1, :records); 
print :records; 

(aucune promesse que ce qui précède est syntaxiquement parfait - je suis loin de la DB en ce moment, mais il devrait être assez proche de vous mettre dans la bonne direction..)

Oh - et vous peut utiliser un type de curseur défini par l'utilisateur à l'intérieur d'un paquet, si cela est approprié pour votre environnement.

+0

Merci !, je vais essayer de l'analyser et essayer de le faire fonctionner ... –

2

Exécutez-vous cela dans SQL * Plus? Avez-vous "défini la sortie du serveur"?

+0

cela ne fonctionne pas, il dit erreur "SET" .. –

+1

Vous avez mentionné "SQL Worksheet" ci-dessus. Cela signifie-t-il que vous utilisez Oracle SQL Developer? Si tel est le cas, cliquez sur l'onglet DBMS_OUTPUT, cliquez sur le bouton Enable DBMS Output et réexécutez la procédure. Assurez-vous que vous n'avez pas d'autres feuilles de calcul ouvertes avec la sortie DBMS activée ou qu'elles peuvent voler la sortie de chaque autre. –

+0

Non, je suis en train d'utiliser Oracle 11g Enterprise Manager, mais j'ai réussi à appliquer dbms_output.enable (1000000); et en essayant d'y accéder dans "SQL Worksheet" en entrant SELECT * DE HR.TOTAL_SALARY WHERE NAME = 'TOTAL_SALARY' ORDER BY LINE; Mais je reçois erreur: package de fonction de procédure ora-04044 ou le type n'est pas autorisé ici –

1

Je recommande pour cette fonction

CREATE OR REPLACE FUNCTION HR.TOTAL_SALARY return number AS  
    total_salary NUMBER(12,2);  
BEGIN  

    SELECT SUM (salary) 
    INTO total_salary 
    FROM employees;  

return total_salary; 

END; 

L'utilisation en est comme:

select hr.TOTAL_SALARY() as total_sal from dual. 
Questions connexes