Преобразование строки
Синтаксис
 
makestr(< строка >[, ... ])

< строка > – выражение типа CHAR, VARCHAR.

Описание

< Строка > может содержать знаки вопроса «?».

Возвращаемое значение
  1. Строка, в которой вместо знаков вопроса подставлены значения параметров, преобразованные к строке. Соответствие знаков вопроса и параметров устанавливается по порядку.

  2. Если необходимо включить в строку сам символ вопроса, он экранируется при помощи двойного или тройного обратного слеша (\\? или \\\?). Экранирование выполняется в 2 этапа:

    а) удаление экранирующего символа:

    • любая строка в процедуре проверяется на наличие обратных слешей: в результате этой проверки производится преобразование;

    • строки вида "\?" в строку вида "?";

    • строки вида "\\?" в строку вида "\?";

    • строки вида "\\\?" в строку вида "\?";

    • строки вида "\\\\?" в строку вида "\\?" и т.д.

    б) получившаяся строка проверяется на наличие "\?".

  3. Если количество вопросов и актуальных выражений-параметров не совпадает, возвращается NULL.

Примеры
1) Функция удобна для формирования текста запроса, если использовать ее вместо конкатенации строк.
Например, вместо:
execute direct "insert into "+tabname+" values("+itoa(a*b)+",'"+charValue+"','"+dtoa(dateValue)+"');";
можно писать:
execute direct makestr("insert into ? values(?, '?', '?');", tabname, a*b, charValue, dateValue);
Такая конструкция читается лучше, не нужны вызовы функций преобразования типов (makestr их делает сама). В случае значения параметра NULL, makestr вставит текст «NULL».
2) Включение в таблицу tab_mkstr(i int, quest char(20)) строки с символом вопроса:
execute direct makestr("insert into ? values(?, '\\?');", "tab_mkstr", 2); //
execute direct makestr("insert into ? values(?, '\\\?');", "tab_mkstr", 3); //
Результат: выполнения примера:
   I           QUEST
   -           -----
  |          2|?                   |
  |          3|?                   |