Строковые значения и идентификаторы в запросах

Содержание раздела
  1. Строковые значения
  2. Строковые идентификаторы

Строковые значения и строковые идентификаторы (имена логических БД, сущностей и столбцов) можно передавать в запросах как значение логического типа VARCHAR, CHAR или STRING:

Правила указания строковых значений и идентификаторов различаются, поэтому описаны ниже в разных секциях.

Строковые значения

Строковые значения, заданные как константы, заключаются в одинарные кавычки. Например:

ERASE_READ_BALANCE('low', 'adp3')

Строковые значения, заданные как параметры, указываются в запросе без одинарных кавычек. При этом значения параметров задаются согласно формату запроса:

  • [HTTP] указываются в полях value секции params и обрамляются двойными кавычками (синтаксис строки JSON, а не SQL+);
  • [JDBC] указываются с помощью метода setString интерфейса PreparedStatement и обрамляются двойными кавычками (синтаксис строки Java, а не SQL+).

Подробнее об использовании параметров см. в разделе Параметры запросов.

Пример HTTP-запроса с именованным и индексированным строковыми параметрами:

curl --request POST \
  --url http://localhost:9090/api/v1/datamarts/query \
  -H 'x-request-id: fea2cadb-e98b-4112-abf0-14c8d04110fd' \
  --header 'Content-Type: application/json' \
  --data '{
    "query": "ERASE_READ_BALANCE(:priority, ?)",
    "queryId": "1234567",
    "params": [
      {
        "name": "priority",
        "value": "low",
        "type": "string"
      },
      {
        "value": "adp3",
        "type": "string"
      }
    ]
  }'

Пример JDBC-запроса с индексированными строковыми параметрами (именованные параметры в JDBC не поддерживаются):

PreparedStatement pst = conn.prepareStatement("ERASE_READ_BALANCE(?, ?)");
// кавычки в setString — синтаксис строки Java, а не SQL+
pst.setString(1, "low");
pst.setString(2, "adp3");

Строковые идентификаторы

Имена логических БД, сущностей и столбцов являются строковыми идентификаторами и всегда указываются без одинарных кавычек, даже если указаны в виде констант.

Имя может быть самостоятельным идентификатором или частью составного идентификатора.

Пример с двумя составными строковыми идентификаторами (marketing.sales и id, product_code), заданными как константы:

-- квадратные скобки вокруг второго идентификатора — часть синтаксиса CHECK_SUM_SNAPSHOT
CHECK_SUM_SNAPSHOT(0, marketing.sales, [id, product_code])

Пример HTTP-запроса с двумя составными строковыми идентификаторами, заданными через именованные параметры table_name и column_list (в отличие от примера с константами, значение параметра column_list указывается без квадратных скобок):

curl --request POST \
  --url http://localhost:9090/api/v1/datamarts/query \
  -H 'x-request-id: 8dec67c3-e686-449e-b181-312554f29bf7' \
  --header 'Content-Type: application/json' \
  --data '{
    "query": "CHECK_SUM_SNAPSHOT(:delta_num, :normalization, :table_name, :column_list)",
    "queryId": "6345678",
    "params": [
      {
        "name": "delta_num",
        "value": 0,
        "type": "long"
      },
      {
        "name": "normalization",
        "value": 10,
        "type": "integer"
      },
      {
        "name": "table_name",
        "value": "marketing.sales",
        "type": "string"
      },
      {
        "name": "column_list",
        "value": "id, product_code",
        "type": "string"
      }
    ]
  }'

Пример JDBC-запроса с двумя составными строковыми идентификаторами, заданными через индексированные параметры:

PreparedStatement pst = conn.prepareStatement("CHECK_SUM_SNAPSHOT(?, ?, ?, ?)");
pst.setLong(1, 0);
pst.setLong(2, 10);
// кавычки в setString — синтаксис строки Java, а не SQL+
pst.setString(3, "marketing.sales");
pst.setString(4, "id, product_code");