检测到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语句. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |