2017-06-22 140 views
0

我正在存储从触发进入一个function.I里面的变量时,我使用function.Below里面的变量正在一个错误的值是我的功能,引发如何使用变量中功能PLPGSQL

CREATE OR REPLACE FUNCTION 
edm.automated_builder_update_trigger_manual() 
RETURNS trigger AS 
$BODY$ 
DECLARE 
    e record; 
    weekly_permit_table text := TG_ARGV[0]; 
BEGIN 


Update edm.weekly_permit_table as a 
set applicant = applicant||' '||'-'||' '||new.builder where 
old.permit_number = split_part(a.permit_details, ' ',1); 


RETURN NULL; 
END; 

我的触发

CREATE TRIGGER builder_update_trigger_manual 
AFTER UPDATE 
ON edm.permit_table_manual_05_2017 
FOR EACH ROW 
WHEN (((old.builder)::text IS DISTINCT FROM (new.builder)::text)) 
EXECUTE PROCEDURE 
edm.automated_builder_update_trigger_manual('weekly_permit_report_05_2017'); 

当我更新 'edm.permit_table_manual_05_2017' 表器值,我得到错误 '错误:关系edm.weekly_permit_table不列入存在'

我知道这可能很愚蠢。但我不确定我在哪里错了。

+0

[执行动态命令(https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN) – Abelisto

+0

广东话我们不使用执行格式? –

+0

执行用户是否有权写入此表? – Mokadillion

回答

0
CREATE OR REPLACE FUNCTION edm.automated_builder_update_trigger_manual() 
RETURNS trigger AS 
$BODY$ 
DECLARE 
    e record; 
    weekly_permit_table text := TG_ARGV[0]; 
BEGIN 
    EXECUTE 
    format(
     $q$ 
     UPDATE edm.%I AS a SET 
      applicant = concat(applicant,' - '||$1) 
     WHERE 
      $2 = split_part(a.permit_details, ' ',1)$q$, 
     weekly_permit_table) 
    USING NEW.builder, OLD.permit_number; 
    RETURN NULL; 
END $BODY$; 

About EXECUTE

+0

谢谢你的工作 –