我如何在SQL中进行错误操作?

时间:2017-05-04 02:39:53

标签: sql postgresql

让我们做一个简单的例子。让我们说我想检查用户是否已登录,看他是否有权查看对话然后获取对话的消息。有没有办法在SQL中使用一个查询执行此操作?这是一些伪代码

@uid = select userid from sessions where session=@session
if @uid == empty Error NotLoggedIn
@IsUser = select 1 from conversation_users where conversation_id=@convo_id AND userid=@uid
if @IsUser == false Error NotAllowed
-- Actual query here
select body, time, user from conversation where conversation_id=@convo_id

1 个答案:

答案 0 :(得分:0)

您不能在纯SQL中抛出错误/异常,它不是为了允许它而设计的。 (除了显而易见的,例如从零{/ 1>}除以。你可以(ab)使用select 0/0表达式使其成为条件,即CASE永远不会抛出错误。)

你想要的通常的SQL等价物是运行单独的查询&在您的(SQL-)客户端构建您的逻辑。此外,当错误原因无关紧要时,您可以使用较少的查询,即:

select case when false then 0/0 end

如果您的错误,这只是不会返回一行。也可以一次返回所有数据,以确定(SQL-)客户端上的错误原因:

select c.body, c.time, c.user
from   conversation c
join   conversation_users using (conversation_id)
join   sessions using (userid)
where  session         = :session
and    conversation_id = :convo_id

如果你真的需要PostgreSQL抛出自定义错误,你需要使用plpgsql's RAISE statement