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)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)