Ну, я же выкладывал текст одного из вариантов. Всё это в процедуре и есть. Если результат - список, то вызовом сразу возвращается очередь, а если просто совокупность переменных - то одним вызовом загружаются несколько.
Если не нужна очередь, то указывается список полей. Если запрос не требует результата, то и поля не нужны
LoadQueueFromSQL('Select sum(...), sum(...), count(....) from ... where ....' , , loc:sum1, loc:sum2, loc:count)
Если результат-список то передаётся очередь и, возможно, список полей очереди, куда писать. Если поля не указаны, результат прописывается в первое, второе и т.д. поле очереди ( кстати, несколько раз сталкивался с глюками и GPF, так что избегаю)
Если в начале запроса стоит '+', очередь не чистится.
NULL на автомате переводится в 0 (для числовых) и '' (для текстовых). Кому надо, пусть учитывает в запросе.
Ну и некоторое расширение языка запросов возможно, например (использовалось в разных программах)
- автоматическая конвертация даты LoadQueueFromSQL('Select [@d]max(date1) ' ,, loc:maxdate)
- автоматическое добавление наименования схемы для Оракл ' Select count(n) from $base ... ' ($ заменяется на имя схемы)
- макро в запросах 'Select ... where x={{ loc:x }}' с заменой по evaluate
Возможность на ходу одним оператором выполнить запрос и бежать дальше - это ли не прекрасно ?