加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

检测到PostgreSQL SQL函数中的UPDATE失败(不是PL / pgSQL)

发布时间:2020-12-13 15:51:26 所属栏目:百科 来源:网络整理
导读:为了模仿 MySQL-REPLACE语句(也就是UPSERT),我需要尝试更新记录,如果失败了 – 请插入它.但是如何在SQL过程中检测到UPDATE失败? begin transaction;create table pref_users ( id varchar(32) primary key,first_name varchar(32),last_name varchar(32),fe
为了模仿 MySQL-REPLACE语句(也就是UPSERT),我需要尝试更新记录,如果失败了 – 请插入它.但是如何在SQL过程中检测到UPDATE失败?

begin transaction;

create table pref_users (
       id varchar(32) primary key,first_name varchar(32),last_name varchar(32),female boolean,avatar varchar(128),city varchar(32),lat real check (-90 <= lat and lat <= 90),lng real check (-90 <= lng and lng <= 90),last_login timestamp default current_timestamp,last_ip inet,medals smallint check (medals > 0)
);
create table pref_rate (
       obj varchar(32) references pref_users(id),subj varchar(32) references pref_users(id),good boolean,fair boolean,nice boolean,about varchar(256),last_rated timestamp default current_timestamp
);

create table pref_money (
       id varchar(32) references pref_users,yw char(7) default to_char(current_timestamp,'YYYY-WW'),money real
);
create index pref_money_yw_index on pref_money(yw);

create or replace function update_pref_users(id varchar,first_name varchar,last_name varchar,avatar varchar,city varchar,last_ip inet) returns void as $$

       update pref_users set
            first_name = $2,last_name = $3,female = $4,avatar = $5,city = $6,last_ip = $7
        where id = $1;

        -- XXX how to detect failure here? XXX

       insert into pref_users(id,first_name,last_name,female,avatar,city,last_ip)
            values ($1,$2,$3,$4,$5,$6,$7);
$$language sql;

commit;

我的update_pref_users SQL函数中是否需要第二对BEGIN / COMMIT?

解决方法

你不能使用SQL作为一种语言,你需要pl / pgsql,因为SQL中缺少if-else结构.

在pl / pgsql中,您可以使用特殊变量FOUND查看查询是否找到了某些内容.

UPDATE ...;
IF NOT FOUND THEN -- UPDATE didn't touch anything
  INSERT ...;
END IF;

不需要额外的SELECT语句.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读