Вам потребуется создать дескриптор - либо дескриптор sqlda
(см. DESCRIBE
и sqlda.h
), либо SQL DESCRIPTOR.Я хотел сказать «проще использовать дескриптор sqlda
», но (если подумать) я не уверен, что это действительно так.
С дескрипторами SQL вы будете использовать:
ALLOCATE DESCRIPTOR
DEALLOCATE DESCRIPTOR
GET DESCRIPTOR
SET DESCRIPTOR
Используя sqlda
, вы можете использовать DESCRIBE для получения информации или самостоятельно создавать дескрипторы.
В любом случае, в результате вы получите:
EXEC SQL EXECUTE :select_prepare USING SQL DESCRIPTOR :name;
или
EXEC SQL EXECUTE :select_prepare USING DESCRIPTOR sqlda_info;
Обратите внимание на синтаксическую странность, заключающуюся в том, что вы не включаете двоеточие до sqlda_info
.
Если вам нужен код, иллюстрирующий этот материал, то:
- DBD :: Informix (модуль Perl, в основном исходный файл
dbdimp.ec
) использует SQL DESCRIPTOR. - SQLCMD (исходный), а не версия Microsoft «Джонни пришедший в последнее время») использует
sqlda
.
В обоих случаях поиск DESCRIPTOR (заглавные буквы) дает вам сильные указатели в правильном направлении.
(Замечу, что вам все еще нужно динамически готовить SQL; если вы не используете временную таблицупредложенный @ RET , текст SQL будет варьироваться в зависимости от количества диапазонов, которые необходимо протестировать.)