1
T-SQL에서 저장 프로 시저를 작성 했으므로 PostgreSQL 용으로 만들고 싶지만 PostgreSQL에 익숙하지 않습니다. 이 같은PostgreSQL 로의 T-SQL 변환의 저장 프로 시저
내 저장 프로 시저의 모양을
CREATE PROCEDURE usp_insert_allocated_time
@fld_project_id INT,
@fld_allocated_time INT
AS
DECLARE @project int;
SET @project = @fld_project_id;
DECLARE @allocated int;
DECLARE @time int;
BEGIN
SET @time = (SELECT SUM(fld_allocated_time)
FROM dbo.tbl_project_timesheet
WHERE fld_project_id [email protected])
SET @allocated = (SELECT fld_allocated_days FROM dbo.tbl_project where fld_id = @project);
IF @allocated > @time
BEGIN
INSERT into dbo.tbl_project_timesheet(fld_project_id,fld_allocated_time)
VALUES(@fld_project_id,@fld_allocated_time);
END
ELSE
PRINT 'Not OK';
END
와 나는 같은 것을 할 필요가 있지만, 라인 10에이 오류가 얻을 :
ERROR : 정수에 대한 잘못된 입력 구문 : "293.00 "
SQL 상태 : 22P02
컨텍스트 : PL/pgSQL의 함수 "SA_PRJ ".usp_add_timesheet_record_new은 (정수, 정수, 숫자, 뉴 문자 변화, 문자 가변)
CREATE OR REPLACE FUNCTION "SA_PRJ".usp_add_timesheet_record_new(p_uid integer, p_project_id integer, p_allocated_time numeric, p_achieved_time numeric, p_task_desc character varying, p_obs character varying)
RETURNS void AS
$BODY$
declare alloc_id integer;
declare project integer;
declare allocated integer;
declare allocated_time integer;
BEGIN
project := p_project_id;
allocated_time := (SELECT SUM(fld_allocated_time)
FROM "SD_PRJ".tbl_project_timesheet
WHERE fld_project_id = project);
allocated := (SELECT fld_allocated_days FROM "SD_PRJ".tbl_project where fld_id = project);
if not "SA_ADM".usp_check_permission(p_uid, 'SA_PRJ', 'usp_add_timesheet_record') then
raise exception 'User ID % no have the permission!', p_uid;
end if;
select fld_id into alloc_id from "SD_PRJ".tbl_project_allocation where fld_emp_id = p_uid and fld_project_id = p_project_id;
BEGIN
IF (allocated > allocated_time) 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
RAISE NOTICE 'Not OK!!';
END IF;
END;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
내가 원하는 것을 위해 더 복잡한 버전이다.
, 당신은 당신의 PostgreSQL 버전, 테이블의 DDL, 그리고 당신이 지금까지 시도해 봤어을주고있다!? – Houari
두 테이블이 있습니다 : 1.Tbl_project 2.Tbl_project_timesheet – Alienware