makestr(<строка>[, ... ])
<строка>
– выражение типа CHAR, VARCHAR.
<Строка>
может содержать знаки вопроса «?».
Строка, в которой вместо знаков вопроса подставлены значения параметров, преобразованные к строке. Соответствие знаков вопроса и параметров устанавливается по порядку.
Если необходимо включить в строку сам символ вопроса, он экранируется при помощи двойного или тройного обратного слеша (\\? или \\\?). Экранирование выполняется в 2 этапа:
а) удаление экранирующего символа:
любая строка в процедуре проверяется на наличие обратных слешей: в результате этой проверки производится преобразование;
строки вида "\?" в строку вида "?";
строки вида "\\?" в строку вида "\?";
строки вида "\\\?" в строку вида "\?";
строки вида "\\\\?" в строку вида "\\?" и т.д.
б) получившаяся строка проверяется на наличие "\?".
Если количество вопросов и актуальных выражений-параметров не совпадает, возвращается NULL.
Функция удобна для формирования текста запроса, если использовать ее вместо конкатенации строк.
Например, вместо:
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».
Включение в таблицу 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|? |