Reputation: 2986
My project using Postgresql and Microsoft SQL Server. So I can't change the parameter name in Postgresql. How can I fix the bug in this case.
my function below.
CREATE OR REPLACE FUNCTION schedule_updatealarmsetting(
userno integer,
isemail boolean,
isalarmi boolean,
ispc boolean,
ismobile boolean,
timealarm integer,
isunuse boolean)
RETURNS void AS
$BODY$
BEGIN
-- check exists
if(exists(select 1 from ScheduleAlarmSetting A where A.UserNo = Schedule_UpdateAlarmSetting.UserNo)) then
begin
-- update
update ScheduleAlarmSetting
set IsEmail = Schedule_UpdateAlarmSetting.IsEmail
, ScheduleAlarmSetting.IsAlarmi = Schedule_UpdateAlarmSetting.IsAlarmi
, ScheduleAlarmSetting.IsPC = Schedule_UpdateAlarmSetting.IsPC
, ScheduleAlarmSetting.TimeAlarm = Schedule_UpdateAlarmSetting.TimeAlarm
, ScheduleAlarmSetting.IsMobile = Schedule_UpdateAlarmSetting.IsMobile
, ScheduleAlarmSetting.IsUnuse = Schedule_UpdateAlarmSetting.IsUnuse
, ScheduleAlarmSetting.ModDate = now()
, ScheduleAlarmSetting.ModUserNo = Schedule_UpdateAlarmSetting.UserNo
where ScheduleAlarmSetting.UserNo = Schedule_UpdateAlarmSetting.UserNo;
end;
else
begin
-- insert
insert into ScheduleAlarmSetting(UserNo,IsEmail,IsAlarmi,IsPC,IsMobile, TimeAlarm, IsUnuse,RegUserNo,RegDate)
values (Schedule_UpdateAlarmSetting.UserNo
, Schedule_UpdateAlarmSetting.IsEmail
, Schedule_UpdateAlarmSetting.IsAlarmi
, Schedule_UpdateAlarmSetting.IsPC
, Schedule_UpdateAlarmSetting.IsMobile
, Schedule_UpdateAlarmSetting.TimeAlarm
, Schedule_UpdateAlarmSetting.IsUnuse
, Schedule_UpdateAlarmSetting.UserNo
, now());
end;
end if;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION schedule_updatealarmsetting(integer, boolean, boolean, boolean, boolean, integer, boolean)
OWNER TO postgres;
select * from schedule_updatealarmsetting(1,True, True, True, True,0,false);
Error column "schedulealarmsetting" of relation "schedulealarmsetting" does not exist
When I remove "schedulealarmsetting." it will show error:"column reference "userno" is ambiguous"
Upvotes: 0
Views: 96
Reputation: 3303
In PostgreSQL, you can not use table aliases after the set command on the update command. Instead of this query:
update ScheduleAlarmSetting
set IsEmail = Schedule_UpdateAlarmSetting.IsEmail
, ScheduleAlarmSetting.IsAlarmi = Schedule_UpdateAlarmSetting.IsAlarmi
, ScheduleAlarmSetting.IsPC = Schedule_UpdateAlarmSetting.IsPC
, ScheduleAlarmSetting.TimeAlarm = Schedule_UpdateAlarmSetting.TimeAlarm
, ScheduleAlarmSetting.IsMobile = Schedule_UpdateAlarmSetting.IsMobile
, ScheduleAlarmSetting.IsUnuse = Schedule_UpdateAlarmSetting.IsUnuse
, ScheduleAlarmSetting.ModDate = now()
, ScheduleAlarmSetting.ModUserNo = Schedule_UpdateAlarmSetting.UserNo
where ScheduleAlarmSetting.UserNo = Schedule_UpdateAlarmSetting.UserNo;
You can use this query:
update ScheduleAlarmSetting
set IsEmail = Schedule_UpdateAlarmSetting.IsEmail
, IsAlarmi = Schedule_UpdateAlarmSetting.IsAlarmi
, IsPC = Schedule_UpdateAlarmSetting.IsPC
, TimeAlarm = Schedule_UpdateAlarmSetting.TimeAlarm
, IsMobile = Schedule_UpdateAlarmSetting.IsMobile
, IsUnuse = Schedule_UpdateAlarmSetting.IsUnuse
, ModDate = now()
, ModUserNo = Schedule_UpdateAlarmSetting.UserNo
where ScheduleAlarmSetting.UserNo = Schedule_UpdateAlarmSetting.UserNo;
Microsoft SQL Server and in most Databases UPDATE
command writes in this format, can not using alias after SET.
Upvotes: 3