oracle用用户定义的异常更新存储过程

时间:2017-04-01 01:35:26

标签: oracle stored-procedures exception-handling

我正在尝试创建此存储过程,该过程应将客户号码和电子邮件地址作为输入。然后更新该客户的电子邮件地址。如果新的电子邮件地址与旧的相同,则应引发异常。

CREATE OR REPLACE PROCEDURE UpdateEmail
(CUSTOMERID IN CUSTOMER.CUSTOMERNO%TYPE, 
 N_EMAIL IN CUSTOMER.EMAIL%TYPE)

IS
DECLARE 
  e_same EXCEPTION;
  V_ROWCOUNT NUMBER;

BEGIN
SELECT COUNT(EMAIL)
INTO V_ROWCOUNT
FROM CUSTOMER@FIT5148B
WHERE CUSTOMER.EMAIL = N_EMAIL
AND CUSTOMER.CUSTOMERNO = CUSTOMERID;

IF V_ROWCOUNT > 0

THEN RAISE e_same;
ELSE 
UPDATE CUSTOMER
SET EMAIL = N_EMAIL
WHERE CUSTOMER.CUSTOMERNO = CUSTOMERID;
END IF;

EXCEPTION
 WHEN e_same THEN dbms_output.put_line ('email address exist');
END;
/

但这是投掷错误。不确定我是否正确行事。我正在使用最新的Oracle SQL Developer。

  

错误(6,1):PLS-00103:遇到符号" DECLARE"什么时候期待   以下之一:begin function pragma procedure子类型        当前   光标删除存在于外部语言之前符号"开始"是   取代" DECLARE"继续。
  错误(28,4):PLS-00103:   遇到符号"文件结尾"当期待其中一个   以下:(开始案例声明结束异常退出goto if   使用<<循环mod null pragma raise返回选择更新继续关闭当前删除获取锁定插入打开   rollback savepoint set sql execute commit forall merge pipe purge

1 个答案:

答案 0 :(得分:0)

删除DECLARE

您不应在程序中使用Declare。如果您正在编写PLSQL块,则只应使用Declare。不在实际的过程体中。