python sql语句异常捕获_postgresql中怎么抛出异常

在PL/pgSQL函数中,如果没有异常捕获,函数会在发生错误时直接退出,与其相关的事物也会随之回滚。我们可以通过使用带有

EXCEPTION子句的BEGIN块来捕获异常并使其从中恢复。见如下声明形式:[ <> ]

[ DECLARE

declarations ]

BEGIN

statements

EXCEPTION

WHEN condition [ OR condition ... ] THEN

handler_statements

WHEN condition [ OR condition ... ] THEN

handler_statements

END;

如果没有错误发生,只有BEGIN块中的statements会被正常执行,然而一旦这些语句中有任意一条发生错误,其后的语句都将被跳过,

直接跳转到 EXCEPTION块的开始处。此时系统将搜索异常条件列表,寻找匹配该异常的第一个条件,如果找到匹配,则执行相应的

handler_statements,之后再执行END的下一条语句。如果没有找到匹配,该错误就会被继续向外抛出,其结果与没有EXCEPTION子

句完全等同。如果此时handler_statements中的语句发生新错误,它将不能被该EXCEPTION子句捕获,而是继续向外传播,交由其外层

的EXCEPTION子句捕获并处理。

在PostgreSQL中可以利用RAISE语句报告信息和抛出错误,其声明形式为:

这里包含的级别有DEBUG(向服务器日志写信息)、LOG(向服务器日志写信息,优先级更高)、INFO、NOTICE和WARNING(把信息写到服务器日志以及转发到客户端应用,优先级逐步升高)和EXCEPTION抛出一个错误(通常退出当前事务)。某个优先级别的信息是报告给客户端还是写到服务器日志,还是两个均有,是由log_min_messages和client_min_messages这两个系统初始化参数控制的。

在format部分中,%表示为占位符,其实际值仅在RAISE命令执行时由后面的变量替换,如果要在format中表示%自身,可以使用%%的

形式表示,见如下示例:RAISE NOTICE 'Calling cs_create_job(%)',v_job_id;--v_job_id变量的值将替换format中的%。RAISE EXCEPTION 'Inexistent ID --> %',user_id;

简单来说:--抛出异常

RAISE EXCEPTION '你出问题了。该修修!';

--使用SQLERRM 来显示错误信息。

RAISE EXCEPTION '(%)', SQLERRM;

见如下示例:CREATE OR REPLACE FUNCTION GETEXCEPTION(v_phone text) RETURNS void AS

$$

BEGIN

IF v_phone = 'iphone' THEN

RAISE EXCEPTION '你出问题了。该修修!';

ELSIF  v_phone = 'samsung' THEN

RAISE EXCEPTION '你会爆炸,离你远点!';

else

RETURN;

END IF;

EXCEPTION

WHEN others THEN

RAISE EXCEPTION '(%)', SQLERRM;

END

$$ LANGUAGE PLPGSQL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值