У вас есть:
SELECT ? AS id, ? as phone, ? as phone_ext, 'CELL' as aa FROM sysmaster:'informix'.sysdual
Нельзя использовать заполнители (?
символы) для «структурных» элементов инструкции SELECT. Вы не можете предоставить имена столбцов в заполнителях. И передача чисел et c в качестве значений через заполнители в списке выбора тоже не работает.
Я бы, вероятно, создал временную таблицу соответствующей формы и вставил в нее строку, а затем используйте временную таблицу в операторе выбора:
SELECT '123456' AS id, '111-222-3333' AS phone, '' AS phone_ext, 'CELL' AS aa
FROM sysmaster:'informix'.sysdual
INTO TEMP phone_data;
MERGE INTO aa_rec AS dest
USING (SELECT * FROM phone_data) AS src
ON dest.id = src.id AND dest.aa = src.aa
WHEN NOT MATCHED THEN
INSERT (dest.id, dest.aa, dest.beg_date, dest.phone, dest.phone_ext, dest.ofc_add_by)
VALUES (src.id, src.aa, TODAY, src.phone, src.phone_ext, 'TEST')
WHEN MATCHED THEN UPDATE SET
dest.phone = src.phone,
dest.phone_ext = src.phone_ext,
dest.beg_date = '10/29/2019',
dest.ofc_add_by = 'TEST'
;
DROP TABLE phone_data;
Возможно, было бы лучше / безопаснее явно создать временную таблицу, а не использовать предложение INTO TEMP. Типы не обязательно соответствуют вашим ожиданиям (CHAR (6), CHAR (12), VARCHAR (1), CHAR (4)) - хотя это может и не иметь значения.
Очевидно, однажды временная таблица существует, вы можете вставить любые временные данные в временную таблицу, используя любой доступный механизм:
INSERT INTO phone_data(id, phone, phone_ext, aa) VALUES(?, ?, ?, ?)
Помните, что временные таблицы являются частными для сеанса - вы можете иметь много людей, использующих одну и ту же временную таблицу имя одновременно, не мешая друг другу.