2016-01-06 32 views
1

我试图执行或运行以下的PL/SQL脚本:PLS-00103:出现符号“申报”

SET serveroutput on; 

CREATE OR REPLACE PROCEDURE findAvg 
(p_category IN products.category_id% TYPE, c OUT NUMBER) 
AS 
BEGIN 
SELECT NVL ((SELECT AVG(LIST_PRICE) FROM products 
WHERE p_category = category_id), -1) into p_category 
from dual; 
END findAvg; 
DECLARE 
cat products.category_id%TYPE; 
Price products.List_price%TYPE; 
BEGIN 
cat := &p_category; 
findAvg (cat, price); 
if (price = -1) then 
    dbms_output.put_line('Wrong Category '); 
ELSE 
    dbms_output.put_line('the average price for category' || cat || ' is ' || price); 
END IF; 
END; 
/
show errors 

但是当我尝试运行它,我得到这个错误信息(我可以只有在显示错误后才能看到):

 PLS-00103: Encountered the symbol "DECLARE" 

这个声明有什么问题?

+0

http://stackoverflow.com/questions/20334067/pls-00103-encountered-the-symbol-create/20334358#20334358 – Drumbeg

回答

1

你缺少一个“/”的创作过程和匿名块的运行开始之间吧:

SET serveroutput on; 

CREATE OR REPLACE PROCEDURE findAvg 
(p_category IN products.category_id% TYPE, c OUT NUMBER) 
AS 
BEGIN 
    SELECT NVL(AVG(LIST_PRICE),-1) 
    INTO c 
    FROM products 
    WHERE p_category = category_id; 
END findAvg; 
/

show errors 

DECLARE 
cat products.category_id%TYPE; 
Price products.List_price%TYPE; 
BEGIN 
cat := &p_category; 
findAvg (cat, price); 
if (price = -1) then 
    dbms_output.put_line('Wrong Category '); 
ELSE 
    dbms_output.put_line('the average price for category' || cat || ' is ' || price); 
END IF; 
END; 
/

此外,“显示错误”命令应该只是在创建后运行过程,如上所述,INTO子句应指定OUT参数。