Oracle存储过程

3

有人能告诉我以下语法的问题在哪里吗?我只是想在存储过程中运行一个简单的SELECT语句。

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;

我一直遇到相同的三个错误,分别是:

  • 错误(9,3):PL/SQL:SQL语句被忽略
  • 错误(23,18):PL/SQL:ORA_00933:SQL命令未正确结束
  • 错误(24,34):PLS-00103:遇到符号“end-of-file”,但期望以下内容之一:(begin、case、declare、end、exception、exit、for、goto、if、loop、mod、null、pragma、raise、return、select、update、while、with、<<、continue、close、current、delete、fetch、lock、insert、open、rollback、savepoint、set、sql、execute、commit、forall、merge、pipe、purge)
1个回答

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; 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接