2014-11-04 3 views
1

Я пытаюсь сделать эту функцию:SQL вставить в

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; 

Я хочу сделать функцию для объединения двух столбцов из таблиц "SD_PRJ".tbl_project и "SD_PRJ".tbl_project_timesheet и сделать сравнение SUM(fld_allocated_time)/24 < fld_allocated_days от входного параметра p_project_id (WHERE t.fld_project_id = p_project_id) и сделайте вставку, если она в порядке или нет.

В столбце ввода fld_project_id может быть больше, чем 1 в таблице.

tbl_ = table name 
fld_ = column/field name 

"SD_PRJ" = my schema name 
\ERROR: syntax error at or near "INTO" 

Ошибка:

LINE 12: INSERT INTO "SD_PRJ".tbl_project_timesheet(fld_emp_id, fl... ^

********** Error **********

ERROR: syntax error at or near "INTO" SQL state: 42601 Character: 550

+0

Внести внутрь свою ошибку Извините за ошибку :) – Alienware

+0

Ваша ошибка в том, что вы не можете вставлять внутри оператора select. Вместо этого попробуйте поместить значение своего аргумента в переменную и определить, следует ли вставлять ее на основе значения переменной в выражении if. – paqogomez

ответ

2

Да, вы пытаетесь написать insert внутри select заявление.

То, что вы, вероятно, хотите что-то вроде этого:

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 

Не совсем уверен, что там все правильно, но вот общая суть этого я думаю.