2011-11-15 286 views
3

任何人都可以告诉我下列语法有什么问题吗?我只是试图在存储过程中运行一个简单的SELECT语句。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; 

我不断收到相同的3个错误,指出:

  • 错误(9,3):PL/SQL:SQL语句忽略
  • 错误(23,18):PL/SQL: ORA_00933:SQL命令未正确结束
  • 错误(24,34):PLS-00103:遇到符号“文件结束”时,期待以下某项操作:(开始case如果循环mod声明结束异常退出空编注提升返回选择更新,同时与< <继续关闭当前删除获取锁芯打开回滚保存点设置SQL执行提交FORALL合流管清洗

回答

4

你的ORDER BY 2 asc

后缺少一个分号你也需要正确地宣布你OUT参数。

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;