The GoogleSQL procedural language lets you execute multiple statements in one query as a multi-statement query. You can use a multi-statement query to:
- Run multiple statements in a sequence, with shared state.
- Automate management tasks such as creating or dropping tables.
Transactions
BEGIN TRANSACTION
Syntax
BEGIN [ TRANSACTION ];
Description
Begins a transaction.
The transaction ends when a COMMIT TRANSACTION
or ROLLBACK TRANSACTION
statement is reached. If
execution ends before reaching either of these statements,
an automatic rollback occurs.
Example
The following example performs a transaction that selects rows from an existing table into a temporary table, deletes those rows from the original table, and merges the temporary table into another table.
BEGIN TRANSACTION ; -- Create a temporary table of new arrivals from warehouse #1 CREATE TEMP TABLE tmp AS SELECT * FROM myschema . NewArrivals WHERE warehouse = 'warehouse #1' ; -- Delete the matching records from the original table. DELETE myschema . NewArrivals WHERE warehouse = 'warehouse #1' ; -- Merge the matching records into the Inventory table. MERGE myschema . Inventory AS I USING tmp AS T ON I . product = T . product WHEN NOT MATCHED THEN INSERT ( product , quantity , supply_constrained ) VALUES ( product , quantity , false ) WHEN MATCHED THEN UPDATE SET quantity = I . quantity + T . quantity ; DROP TABLE tmp ; COMMIT TRANSACTION ;
COMMIT TRANSACTION
Syntax
COMMIT [ TRANSACTION ];
Description
Commits an open transaction. If no open transaction is in progress, then the statement fails.
Example
BEGIN TRANSACTION ; -- SQL statements for the transaction go here. COMMIT TRANSACTION ;
ROLLBACK TRANSACTION
Syntax
ROLLBACK [ TRANSACTION ];
Description
Rolls back an open transaction. If there is no open transaction in progress, then the statement fails.
Example
The following example rolls back a transaction if an error occurs during the transaction. To illustrate the logic, the example triggers a divide-by-zero error after inserting a row into a table. After these statements run, the table is unaffected.
BEGIN BEGIN TRANSACTION ; INSERT INTO myschema . NewArrivals VALUES ( 'top load washer' , 100 , 'warehouse #1' ); -- Trigger an error. SELECT 1 / 0 ; COMMIT TRANSACTION ; EXCEPTION WHEN ERROR THEN -- Roll back the transaction inside the exception handler. SELECT @@ error . message ; ROLLBACK TRANSACTION ; END ;
CALL
Syntax
CALL procedure_name ( procedure_argument [, … ])
Description
Calls a procedure
with an argument list. procedure_argument
may be a variable or an expression.
Spanner doesn't support stored procedures or server-side scripts.
Use CALL
with only the example procedures listed on this page.
The maximum depth of procedure calls is 50 frames.
Examples
The following example cancels a query with the query ID 12345
.
CALL cancel_query ( "12345" );

