SQL查询错误插入到
我正在尝试执行以下功能:SQL查询错误插入到,sql,postgresql,aggregate-functions,postgresql-9.1,Sql,Postgresql,Aggregate Functions,Postgresql 9.1,我正在尝试执行以下功能: CREATE OR REPLACE FUNCTION "SA_PRJ".usp_verify_allocated_time(p_uid integer, p_project_id integer, p_allocated_time numeric, p_achieved_time numeric, p_task_desc character varying, p_obs character varying, p_date timestamp without tim
CREATE OR REPLACE FUNCTION "SA_PRJ".usp_verify_allocated_time(p_uid integer, p_project_id integer, p_allocated_time numeric, p_achieved_time numeric, p_task_desc character varying, p_obs character varying, p_date timestamp without time zone)
RETURNS void AS
$BODY$
declare alloc_id integer;
BEGIN
if not "SA_ADM".usp_check_permission(p_uid, 'SA_PRJ', 'usp_add_timesheet_record') then
raise exception 'User ID % nu are permisii pentru aceasta operatie!', p_uid;
end if;
SELECT *,
case when SUM(fld_allocated_time) / 24 < fld_allocated_days
then
INSERT INTO "SD_PRJ".tbl_project_timesheet(fld_emp_id, fld_project_id, fld_is_allocated,fld_allocated_time, fld_achieved_time, fld_task_desc, fld_obs)
VALUES (p_uid,p_project_id,coalesce(alloc_id,0), p_allocated_time, p_achieved_time,p_task_desc, p_obs);
else 'Not OK'
end as Alocated
from
(
SELECT p.fld_id, p.fld_allocated_days, t.fld_allocated_time
FROM "SD_PRJ".tbl_project p
INNER JOIN "SD_PRJ".tbl_project_timesheet t
ON p.fld_id=t.fld_id
where t.fld_project_id = p_project_id
)AS Alias
GROUP BY fld_id, fld_allocated_days, fld_allocated_time
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION "SA_PRJ".usp_usp_verify_allocated_time(integer, integer, numeric, numeric, character varying, character varying, timestamp without time zone)
OWNER TO postgres;
错误:
第12行:插入“SD_PRJ”。tbl_项目时间表(fld_emp_id,fl。。。
^
**********错误**********
错误:语法错误位于或接近“进入”SQL状态:42601字符:550
是的,您正试图在
select
语句中编写insert
您可能想要的是这样的:
INSERT INTO "SD_PRJ".tbl_project_timesheet(fld_emp_id, fld_project_id, fld_is_allocated,fld_allocated_time, fld_achieved_time, fld_task_desc, fld_obs)
select p_uid,p_project_id,coalesce(alloc_id,0), p_allocated_time, p_achieved_time,p_task_desc, p_obs
from
(
SELECT p.fld_id, p.fld_allocated_days, t.fld_allocated_time
FROM "SD_PRJ".tbl_project p
INNER JOIN "SD_PRJ".tbl_project_timesheet t
ON p.fld_id=t.fld_id
where t.fld_project_id = p_project_id
)AS Alias
GROUP BY fld_id, fld_allocated_days, fld_allocated_time
having SUM(fld_allocated_time) / 24 < fld_allocated_days
插入“SD_PRJ”。待完成项目时间表(fld_emp_id,fld_项目id,fld_分配,fld_分配时间,fld_完成时间,fld_任务描述,fld_obs)
选择p_uid、p_项目id、合并(分配id,0)、p_分配时间、p_完成时间、p_任务描述、p_obs
从…起
(
选择p.fld\U id、p.fld\U分配的天数、t.fld\U分配的时间
来自“SD_PRJ”。tbl_项目p
内部连接“SD\U PRJ”。tbl\U项目\U时间表t
在p.fld_id=t.fld_id上
其中t.fld_project_id=p_project_id
)化名
按航班id、航班分配天数、航班分配时间分组
总天数(分配时间)/24<分配天数
不完全确定是否一切正常,但我认为这是它的一般要点。插入错误抱歉出错:)您的错误是因为无法在select语句中插入。相反,尝试将case值放入变量中,并根据if语句中的变量值确定是否应该插入。
INSERT INTO "SD_PRJ".tbl_project_timesheet(fld_emp_id, fld_project_id, fld_is_allocated,fld_allocated_time, fld_achieved_time, fld_task_desc, fld_obs)
select p_uid,p_project_id,coalesce(alloc_id,0), p_allocated_time, p_achieved_time,p_task_desc, p_obs
from
(
SELECT p.fld_id, p.fld_allocated_days, t.fld_allocated_time
FROM "SD_PRJ".tbl_project p
INNER JOIN "SD_PRJ".tbl_project_timesheet t
ON p.fld_id=t.fld_id
where t.fld_project_id = p_project_id
)AS Alias
GROUP BY fld_id, fld_allocated_days, fld_allocated_time
having SUM(fld_allocated_time) / 24 < fld_allocated_days