使用 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;
/
我需要创建一个过程,将大于 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;
/