Postgres函数尝试3个一个接一个地插入吗?

时间:2019-01-10 16:04:16

标签: sql postgresql

我正在尝试创建一个过程(对于RDBMS来说是非常陌生的),其中给出了用户的详细信息和一系列课程,该过程将尝试使用户注册该课程。如果成功,该过程将以代码1退出,否则它将再次尝试数组中的第二个过程,依此类推,直到第三个过程。

这是我想出的:

CREATE OR REPLACE FUNCTION  enroll_user_procedure(userID INTEGER, REFID INTEGER[], REFTYPE CHARACTER VARYING, slotNO SMALLINT)  
RETURNS code AS $$
BEGIN
    INSERT INTO user_enrollments(user_id,ref_id,type,slot) VALUES (userID,REFID[1],REFTYPE,slotNO) RETURNING enroll_id INTO enroll_id;
 EXCEPTION
     WHEN SQLSTATE 'COUFL' then
   INSERT INTO user_enrollments(user_id,ref_id,type,slot) VALUES (userID,REFID[2],REFTYPE,slotNO) RETURNING enroll_id INTO enroll_id;
   EXCEPTION
       WHEN SQLSTATE 'COUFL' then
     INSERT INTO user_enrollments(user_id,ref_id,type,slot) VALUES (userID,REFID[3],REFTYPE,slotNO) RETURNING enroll_id INTO enroll_id;
     EXCEPTION
         WHEN SQLSTATE 'COUFL' then
      RETURN QUERY SELECT 0 INTO code;
     END
   END;  
 END; 
    COMMIT;
END;
$$; LANGUAGE plpgsql

此触发功能引发COUFL的位置:

if enroll_count >= courses_limit then
    UPDATE courses SET status = 0 WHERE course_id = NEW.ref_id; 
    RAISE EXCEPTION USING
        errcode='COUFL',
    message='course_full';
end if;

我的问题:我是过程和函数的新手,所以我想知道这是否是正确的方法?或者,还有更好的方法?此外,此功能还会显示“未指定语言”错误。即使我做到了我要去哪里错了?

0 个答案:

没有答案