使用 if/else 的过程

Procedure with if/else

我需要创建一个过程,将大于 0 且小于 1 的数字用作折扣金额。如果用户输入的数字超出我的参数范围,我还需要创建一个例外。

我创建了以下过程,但它没有编译,我不确定哪里出错了。有什么想法吗?

CREATE OR REPLACE
 PROCEDURE prod_disc
  (p_disc IN DECIMAL)
IS
 DECLARE
  my_excep EXCEPTION;
 BEGIN
 UPDATE
  xx_product
   SET p_discount = (p_discount + p_disc)
   WHERE p_qoh >= (p_min * 2);
 IF p_disc > 0 OR p_disc < 1 THEN
  RAISE my_excep;
 END IF;
EXCEPTION
 WHEN my_excep THEN
DBMS_OUTPUT.PUT_LINE('Error: Value must be greater than 0 and less than 1');
END;

/ 显示错误; ORA-24344: 成功但有编译错误 /

请删除;在异常子句中

OLD: 
 EXCEPTION;
 WHEN my_excep THEN
    DBMS_OUTPUT.PUT_LINE('Error: Value must be greater than 0 and less than 1');

NEW: 
 EXCEPTION
 WHEN my_excep THEN
    DBMS_OUTPUT.PUT_LINE('Error: Value must be greater than 0 and less than 1');

删除“DECLARE”关键字 您可以在 'IS' 关键字之后声明变量,因为它是作为 procedure/function 的声明部分构建的,而无需放置关键字 'DECLARE '

DECLARE 是多余的 - 删除它。

此外,不要使用 DBMS_OUTPUT.PUT_LINE,而是使用 RAISE_APPLICATION_ERROR,因为没有人会看到前者的结果(除非他在支持此类输出的工具中运行。后者随处可见

已修复,您的代码可能如下所示(我没有检查其逻辑):

CREATE OR REPLACE PROCEDURE prod_disc (p_disc IN DECIMAL)
IS
   my_excep   EXCEPTION;
BEGIN
   UPDATE xx_product
      SET p_discount = (p_discount + p_disc)
    WHERE p_qoh >= (p_min * 2);

   IF    p_disc > 0
      OR p_disc < 1
   THEN
      RAISE my_excep;
   END IF;
EXCEPTION
   WHEN my_excep
   THEN
      raise_application_error (
         -20000,
         'Error: Value must be greater than 0 and less than 1');
END;
/