Строковые значения и идентификаторы в запросах
Содержание раздела
Строковые значения и строковые идентификаторы (имена логических БД, сущностей и столбцов) можно передавать в запросах как значение логического типа 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");