使用显式事务¶
要在显式 :doc:` 事务 </sql-reference/transactions>` 中执行 SQL 语句,必须使用 :doc:` 一个 HTTP 请求 <submitting-multiple-statements>` 来指定事务中的开始、结束和语句。例如:
{
"statement": "begin transaction; insert into table2 (i) values (1); commit; select i from table1 order by i",
...
"parameters": {
"MULTI_STATEMENT_COUNT": "4"
}
...
}
当 :ref:` 在一个请求中指定多个语句 <label-sql_api_checking_multiple_statement_status>` 时,如果请求处理成功,Snowflake 将返回一个包含 statementHandles
字段的响应,该字段设置为请求中语句的句柄数组(包括 BEGIN TRANSACTION 和 COMMIT 语句)。
HTTP/1.1 200 OK
Content-Type: application/json
{
"resultSetMetaData" : {
"numRows" : 1,
"format" : "jsonv2",
"rowType" : [ {
"name" : "multiple statement execution",
"database" : "",
"schema" : "",
"table" : "",
"type" : "text",
"byteLength" : 16777216,
"scale" : null,
"precision" : null,
"nullable" : false,
"collation" : null,
"length" : 16777216
} ]
},
"data" : [ [ "Multiple statements executed successfully." ] ],
"code" : "090001",
"statementHandles" : [ "019d6ed0-0502-3101-0000-096d00421082", "019d6ed0-0502-3101-0000-096d00421086", "019d6ed0-0502-3101-0000-096d0042108a", "019d6ed0-0502-3101-0000-096d0042108e" ],
"statementStatusUrl" : "/api/v2/statements/019d6ed0-0502-3101-0000-096d0042107e?requestId=066920fa-e589-43c6-8cca-9dcb2d4be978",
"sqlState" : "00000",
"statementHandle" : "019d6ed0-0502-3101-0000-096d0042107e",
"message" : "Statement executed successfully.",
"createdOn" : 1625684162876
}
statementHandles
字段中的句柄对应于请求中的语句。在此示例中,语句及其相应的句柄为:
BEGIN TRANSACTION (
019d6ed0-0502-3101-0000-096d00421082
)INSERT (
019d6ed0-0502-3101-0000-096d00421086
)COMMIT (
019d6ed0-0502-3101-0000-096d0042108a
)SELECT (
019d6ed0-0502-3101-0000-096d0042108e
)
可以使用这些句柄来 检查每个语句的状态。