RAISE有以下五种语法格式:




参数说明:
--v_job_id 将替换字符串中的 %:
RAISE NOTICE 'Calling cs_create_job(%)',v_job_id;
如果在RAISE EXCEPTION命令中既没有指定条件名也没有指定SQLSTATE,默认用RAISE EXCEPTION (P0001)。如果没有指定消息文本,默认用条件名或者SQLSTATE作为消息文本。

当由SQLSTATE指定了错误码,则不局限于已定义的错误码,可以选择任意包含五个数字或者大写的ASCII字母的错误码,而不是00000。建议避免使用以三个0结尾的错误码,因为这种错误码是类别码,会被整个种类捕获。
说明:图5所示的语法不接任何参数。这种形式仅用于一个BEGIN块中的EXCEPTION语句,它使得错误重新被处理。
CREATE OR REPLACE PROCEDURE proc_raise1(user_id in integer)
AS
BEGIN
RAISE EXCEPTION 'Noexistence ID --> %',user_id USING HINT = 'Please check your user ID';
END;
/
call proc_raise1(300011);
--执行结果
ERROR: Noexistence ID --> 300011
HINT: Please check your user ID
CREATE OR REPLACE PROCEDURE proc_raise2(user_id in integer)
AS
BEGIN
RAISE 'Duplicate user ID: %',user_id USING ERRCODE = 'unique_violation';
END;
/
\set VERBOSITY verbose
call proc_raise2(300011);
--执行结果
ERROR: Duplicate user ID: 300011
SQLSTATE: 23505
LOCATION: exec_stmt_raise, pl_exec.cpp:3482
如果主要的参数是条件名或者是SQLSTATE,可以使用:
RAISE division_by_zero;
RAISE SQLSTATE '22012';
例如:
CREATE OR REPLACE PROCEDURE division(div in integer, dividend in integer)
AS
DECLARE
res int;
BEGIN
IF dividend= THEN
RAISE division_by_zero;
RETURN;
ELSE
res := div/dividend;
RAISE INFO 'division result: %', res;
RETURN;
END IF;
END;
/
call division(3,);
--执行结果
ERROR: division_by_zero
RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3129808/ ,如需转载,请注明出处,否则将追究法律责任。