Вам потребуется использовать динамический SQL в хранимой процедуре - например, оператор EXECUTE IMMEDIATE .
Вы создаете строку, содержащую текст SQL, а затем выполняете ее. Адаптация вашего кода:
CREATE PROCEDURE spUnloadData(file_name_param VARCHAR(64))
DEFINE stmt VARCHAR(255); -- LVARCHAR might be safer
CREATE TEMP TABLE temp_1(
col_11 SMALLINT
) WITH NO LOG;
INSERT INTO temp_1 select col1 from data_table;
LET stmt = 'CREATE EXTERNAL TABLE temp1_ext ' ||
'SAMEAS temp_1 USING DATAFILES("DISK:' ||
TRIM(file_name_param) ||
'")';
EXECUTE IMMEDIATE stmt;
INSERT INTO temp1_ext SELECT * FROM temp_1;
DROP TABLE temp1_ext;
DROP TABLE temp_1;
END PROCEDURE;
Непроверенный код - концепция должна быть разумной.
Предполагается, что вы используете достаточно свежую версию Informix; необходимая функция есть в 12.10, и, как мне кажется, в некоторых версиях версии 11.70.