我在pgadmin上创建了一个触发器,当在触发该触发器的表上插入新记录时,出现错误:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
500内部服务器错误
服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序错误。
触发代码:
CREATE OR REPLACE FUNCTION get_user_id_from_hr_emplyee_into_namerel()
RETURNS trigger LANGUAGE plpgsql
AS $$
DECLARE
logged_user_id INTEGER;
BEGIN
SELECT distinct resource.user_id FROM hr_employee emp
LEFT JOIN resource_resource resource ON resource.id=emp.resource_id where emp.id=new.employee_id into logged_user_id ;
IF ( logged_user_id <> null) THEN
new.namerel=logged_user_id;
END IF;
RETURN null;
END;
$$;
CREATE TRIGGER last_name_changes
BEFORE Insert or UPDATE
ON hr_payslip
FOR EACH ROW
EXECUTE PROCEDURE get_user_id_from_hr_emplyee_into_namerel();
答案 0 :(得分:0)
PLPGSQL SELECT
... INTO
必须始终返回不超过一行,否则您将得到错误。
答案 1 :(得分:0)
更改后,它将为我运行。
CREATE OR REPLACE FUNCTION get_user_id_from_hr_emplyee_into_namerel()
RETURNS trigger LANGUAGE plpgsql
AS $$
DECLARE
logged_user_id INTEGER;
BEGIN
SELECT distinct resource.user_id into logged_user_id FROM hr_employee emp
LEFT JOIN resource_resource resource ON resource.id=emp.resource_id where emp.id=new.employee_id;
new.namerel=logged_user_id;
--IF ( logged_user_id <> null) THEN
--END IF;
RETURN new;
END;
$$;
CREATE TRIGGER last_name_changes
BEFORE Insert or UPDATE
ON hr_payslip
FOR EACH ROW
EXECUTE PROCEDURE get_user_id_from_hr_emplyee_into_namerel();