表结构:
查看已存在记录:
编写存储过程:
这里我们编写的存储过程的需求是插入记录的时候,看一下用户名是否已存在,如果存在,就抛出异常,如果不存在就插入记录:
create or replace PROCEDURE MY_USER_PROCEDURE
(
IN_USERNAME IN VARCHAR2, --input parameters:username
IN_PASSWORD IN VARCHAR2
) AS
EXIST_COUNT NUMBER(10); --count existed records
INSERT_EXCEPTION EXCEPTION; --declare exception
BEGIN
SELECT COUNT(*) INTO EXIST_COUNT FROM WYH_USERS WHERE USERNAME = IN_USERNAME; --query existed record
IF EXIST_COUNT > 0 THEN --if username exists
RAISE INSERT_EXCEPTION; --invoke exception
ELSE
INSERT INTO WYH_USERS(USERNAME,PASSWORD) VALUES(IN_USERNAME, IN_PASSWORD);
END IF;
COMMIT; --commit trasaction
EXCEPTION
WHEN INSERT_EXCEPTION THEN --process insert exception
RAISE_APPLICATION_ERROR(-20121, 'username already exists,please change your username~'); --自定义错误码和错误提示信息
WHEN OTHERS THEN
ROLLBACK;
END;
调用存储过程:我们传一个已经存在的username
EXEC MY_USER_PROCEDURE('WYH','345');
运行结果:
这里面的错误码:20121以及错误信息就是我们在procedure中指定的。这样就演示完了存储过程的创建以及存储过程中如何根据我们的业务抛出异常。