Доступные версии документации

Преобразование строки
Синтаксис
 
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|?                   |
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter