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

检测到PostgreSQL SQL函数中的UPDATE失败(不是PLpgSQL),第1张

概述为了模仿 MySQL-REPLACE语句(也就是UPSERT),我需要尝试更新记录,如果失败了 – 请插入它.但是如何在SQL过程中检测到UPDATE失败? begin transaction;create table pref_users ( id varchar(32) primary key, first_name varchar(32), la 为了模仿 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 = ,last_name = ,female = ,avatar = ,city = ,last_ip =         where ID = ;        -- XXX how to detect failure here? XXX       insert into pref_users(ID,first_name,last_name,female,avatar,city,last_ip)            values (,,,,,,);$$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语句.

总结

以上是内存溢出为你收集整理的检测到PostgreSQL SQL函数中的UPDATE失败(不是PL / pgSQL)全部内容,希望文章能够帮你解决检测到PostgreSQL SQL函数中的UPDATE失败(不是PL / pgSQL)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1155660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存