2011-11-15 4 views
3

Quelqu'un peut-il m'aider en me disant ce qui ne va pas avec la syntaxe suivante? J'essaie juste d'exécuter une instruction SELECT simple dans une procédure stockée.Procédure stockée Oracle

CREATE OR REPLACE PROCEDURE PVSSRDB.GETBATTERYSTATUSFORALLLOGGERS 
(
    p_Logger OUT e.comment_, 
    p_tStamp OUT h.ts, 
    p_Val OUT h.value_number 
) 
AS 
BEGIN 
    select 
    e.comment_, 
    max(h.ts), 
    avg(h.value_number) 
INTO 
    p_Logger, 
    p_tStamp, 
    p_Val 
FROM 
    PVSSRDB.ELEMENTS e inner join PVSSRDB.DB15MINHISTORY_00100009 h on h.element_id =e.element_id 
WHERE 
    e.element_name like 'System1:H%.BatteryCondition' 
GROUP BY 
    e.comment_ 
ORDER by 2 asc 
END GETBATTERYSTATUSFORALLLOGGERS; 

Je continue à obtenir les mêmes 3 erreurs indiquant:

  • erreur (9,3): PL/SQL: Instruction SQL Ignoré
  • erreur (23,18): PL/SQL: ORA_00933: La commande SQL n'est pas terminée correctement
  • Erreur (24,34): PLS-00103: Le symbole "fin de fichier" a été rencontré lors de l'une des opérations suivantes: (début de l'instruction case declare exit exit pour goto si loop mod null pragma raise retour sélectionner la mise à jour pendant que < < continuer fermer jeu en cours de suppression chercher insert verrou ouvert rollback savepoint exécution SQL commit fusion forall purge de tuyau

Répondre

4

vous manque un point-virgule après la ORDER BY 2 asc

Aussi, vous devez déclarer vos paramètres OUT correctement.

CREATE OR REPLACE 
PROCEDURE PVSSRDB.GETBATTERYSTATUSFORALLLOGGERS (
    p_Logger OUT PVSSRDB.ELEMENTS.comment_%TYPE, 
    p_tStamp OUT PVSSRDB.DB15MINHISTORY_00100009.ts%TYPE, 
    p_Val OUT PVSSRDB.DB15MINHISTORY_00100009.value_number%TYPE 
) 
AS 
BEGIN 
    select e.comment_, 
      max(h.ts), 
      avg(h.value_number) 
    INTO p_Logger, 
      p_tStamp, 
      p_Val 
    FROM PVSSRDB.ELEMENTS e 
    inner join PVSSRDB.DB15MINHISTORY_00100009 h on (h.element_id =e.element_id) 
    WHERE e.element_name like 'System1:H%.BatteryCondition' 
    GROUP BY e.comment_ 
    ORDER by 2 asc; 
END GETBATTERYSTATUSFORALLLOGGERS; 
Questions connexes