postgresql,将数据插入到动态创建的表中

时间:2017-03-17 06:51:50

标签: java postgresql triggers

我必须将数据从一个表(main_tbl)复制到另一个表(sub_tbl)

CREATE  OR  REPLACE FUNCTION  auditlogfunc() RETURNS TRIGGER AS  
$example_table$
DECLARE 
  temp text;
BEGIN
    temp = 'SELECT device_id FROM company ORDER BY id DESC LIMIT 1';
    INSERT INTO temp(emp_id, entry_date, name,age)      VALUES(new.id,current_timestamp,  new.name, new.age);
RETURN NEW;
END;
$example_table$ LANGUAGE plpgsql;

temp = 'SELECT device_id FROM company ORDER BY id DESC LIMIT 1';这将从main_tbl中选择最后一个值并存储到temp变量中。

现在我想将数据从main_tbl复制到临时表..

  

错误:关系" temp"不存在

2 个答案:

答案 0 :(得分:0)

请参阅here如何将查询结果存储在变量中。

请参阅here如何将字符串作为SQL命令执行。

在变量上使用quote_ident()函数,然后将其作为标识符包含在SQL查询字符串中。这样就可以安全地禁止SQL注入。

答案 1 :(得分:0)

@a_horse_with_no_name已经指出了如何做到这一点。如果我理解正确,你已经创建了dv002表。

 CREATE OR REPLACE FUNCTION  auditlogfunc ()
 RETURNS trigger AS
 $body$ 

DECLARE 
  get_last_value integer;
  your_table_name text := 'dv002';
BEGIN

  SELECT id into get_last_value FROM tb_main_table ORDER BY id DESC LIMIT 1;
  EXECUTE format('insert into %s(emp_id, entry_date, name,age) VALUES ($1,$2,$3,$4,$5)', your_table_name) using get_last_value,new.id,current_timestamp,  new.name, new.age;

 RETURN new;
 $body$
 LANGUAGE plpgsql;