Ошибка вызвана этой частью, || CreatedDate ||
. Для конкатенации требуются строковые операнды, но CreatedDate
является меткой времени, и нет автоматических приведений типов для времени и метки времени.
Когда вы добавите явное || CAST(CreatedDate AS VarChar(26)||
, вы получите еще одну ошибку, потому что строка, которую вы передаете EXECUTE IMMEDIATE
, должна иметь правильный синтаксис, но вы пытаетесь выполнить:
INSERT INTO tables.Computer (NTID, CreatedDate) VALUES ('bla',2018-05-03 12:25:41.65000)
Таким образом, вам нужно процитировать метку времени (и лучше использовать литерал метки времени):
SET res = 'INSERT INTO Computer (NTID, CreatedDate) VALUES (''' || ReplaceNTIDVAR
|| ''', TIMESTAMP ''' || Cast( CreatedDate AS VARCHAR(25)) ||''') ';
, что в итоге дает правильный синтаксис:
INSERT INTO Computer (NTID, CreatedDate) VALUES ('bla', TIMESTAMP '2018-05-03 12:27:34.99000')
НО, нет никаких причин для динамического SQL (который склонен к SQL-инъекции ), просто используйте жестко запрограммированную вставку с параметрами:
INSERT INTO Компьютер (NTID, CreatedDate) ЗНАЧЕНИЯ (: NTIDVar,: CreatedDate);
Конечно, ваш последний SET ReturnRes = res;
также потерпит неудачу, потому что ReturnRes
- INT.