Postgresql不支持查询时的时间戳值

时间:2018-05-09 08:37:17

标签: postgresql postgresql-9.3

DECLARE
MAX_upd_date_Entity_Incident timestamp without time zone;
MAX_upd_date_Entity_Incident := (SELECT LAST_UPDATE_DATE::timestamp FROM 
test.table_1 where TABLE_NAME='mac_incidents_d');

execute 'insert into test.table2 (column_name,schema_name,tablename) 
values(''col1'',''col2'',''col3'') from test.table3 X where X.dl_upd_ts::timestamp > '||
MAX_upd_date_Entity_Incident;

以上查询未执行,时间戳值出错,无法读取变量MAX_upd_date_Entity_Incident

如果我们需要将时间戳转换为其他格式,请建议我。

我能够在SQL编辑器中执行查询,但不能使用execute

1 个答案:

答案 0 :(得分:0)

不要将值作为字符串文字传递。使用占位符并将它们作为“本机”值传递。

此外,如果要从表中选择源值,则无法使用values子句。插入语句 insert into tablename (column_one, column_two) values (value_one, value_two) insert into (column_one, column_two) select c1, c2 from some_table

我也不认为需要动态SQL开头:

insert into test.table2 (column_name,schema_name,tablename) 
select col1,col2,col3 
from test.table3 X 
where X.dl_upd_ts::timestamp > MAX_upd_date_Entity_Incident;

如果你过分简化了你的例子而你确实需要动态SQL,你应该使用这样的东西:

execute 'insert into test.table2 (column_name,schema_name,tablename) 
select col1,col2,col3) from test.table3 X where X.dl_upd_ts::timestamp > $1' 
    using MAX_upd_date_Entity_Incident;