【发布时间】:2015-01-07 21:40:04
【问题描述】:
我有一个函数:
比较不同表中的两列
进行插入
由于出现此错误,我如何才能对此代码进行一些改进:
ERROR: column reference "fld_id" is ambiguous SQL state: 42702 line 17 at PERFORM
CREATE OR REPLACE FUNCTION "SA_PRJ".usp_add_timesheet_test(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$
BEGIN
DECLARE sum_alloc_time numeric;
DECLARE alloc_hours integer;
DECLARE fld_id integer;
SELECT @sum_alloc_time = SUM(fld_allocated_time)
from "SD_PRJ".tbl_project_timesheet
where fld_project_id = p_project_id;
SELECT @alloc_hours = p.fld_allocated_days, @fld_id = p.fld_id
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;
IF @sum_alloc_time <= @alloc_hours 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, fld_date)
VALUES (p_uid,p_project_id,coalesce(alloc_id,0), p_allocated_time, p_achieved_time,p_task_desc, p_obs, p_date);
RAISE NOTICE 'INSERT OK!';
ELSE
RAISE NOTICE 'NOT OK';
END IF;
END;
$BODY$ LANGUAGE plpgsql;
有两个表:
"SD_PRJ".tbl_project (
fld_id
,fld_allocated_days)
"SD_PRJ".tbl_project_timesheet (
fld_id
, fld_project_id
,fld_allocated_time)
【问题讨论】:
-
您需要向我们展示您的表格结构,以及包含错误的行。
-
SELECT @sum_alloc_time = SUM(fld_allocated_time)是 Postgres 的无效 SQL。这看起来更像是用于 SQL Server 的 T-SQL。 -
我正在研究 T-SQL 但现在我需要创建一个 Postgresql 函数并从 T-SQL 中获取一些关键字,因为现在我正在学习 postgresql。
-
请先阅读 Postgres 手册。除了模棱两可的列问题之外,还有更多错误
-
你能对我的代码做一些改进吗?因为我只需要完成这个功能。
标签: sql function postgresql stored-procedures