Postgresql не поддерживает значение метки времени по запросу - PullRequest
0 голосов
/ 09 мая 2018
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 голосов
/ 09 мая 2018

Не передавайте значения как строковые литералы. Используйте заполнители и передавайте их как «нативные» значения.

Кроме того, вы не можете использовать предложение 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;
...