Procedural language in GoogleSQL

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");