From 7e1955b861a1be9ef2dfd6acdd50d0c6b5a75794 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 16 Jan 2014 16:40:17 -0500 Subject: [PATCH] docs: update PL/pgSQL docs about the use of := and = --- doc/src/sgml/plpgsql.sgml | 17 +++++++++++------ src/pl/plpgsql/src/pl_gram.y | 7 ++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index ca2c2b5851..48880ce625 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -328,7 +328,7 @@ arow RECORD; The general syntax of a variable declaration is: -name CONSTANT type COLLATE collation_name NOT NULL { DEFAULT | := } expression ; +name CONSTANT type COLLATE collation_name NOT NULL { DEFAULT | := | = } expression ; The DEFAULT clause, if given, specifies the initial value assigned to the variable when the block is entered. If the DEFAULT clause @@ -343,6 +343,8 @@ arow RECORD; is specified, an assignment of a null value results in a run-time error. All variables declared as NOT NULL must have a nonnull default value specified. + Equals (=) can be used instead of PL/SQL-compliant + :=. @@ -866,7 +868,7 @@ PREPARE statement_name(integer, integer) AS SELECT $1 < $2; An assignment of a value to a PL/pgSQL variable is written as: -variable := expression; +variable { := | = } expression; As explained previously, the expression in such a statement is evaluated by means of an SQL SELECT command sent to the main @@ -874,7 +876,8 @@ PREPARE statement_name(integer, integer) AS SELECT $1 < $2; a row value, if the variable is a row or record variable). The target variable can be a simple variable (optionally qualified with a block name), a field of a row or record variable, or an element of an array - that is a simple variable or field. + that is a simple variable or field. Equals (=) can be + used instead of PL/SQL-compliant :=. @@ -1411,7 +1414,7 @@ EXECUTE format('UPDATE tbl SET %I = $1 WHERE key = $2', colname) command, which has the form: -GET CURRENT DIAGNOSTICS variable = item , ... ; +GET CURRENT DIAGNOSTICS variable { = | := } item , ... ; This command allows retrieval of system status indicators. Each @@ -1425,6 +1428,8 @@ GET CURRENT DIAGNOSTICS variableSQL command. Note that RESULT_OID is only useful after an INSERT command into a table containing OIDs. + Equals (:=) can be used instead of SQL-standard + = for GET DIAGNOSTICS. @@ -2672,7 +2677,7 @@ SELECT merge_db(1, 'dennis'); GET STACKED DIAGNOSTICS command, which has the form: -GET STACKED DIAGNOSTICS variable = item , ... ; +GET STACKED DIAGNOSTICS variable { = | := } item , ... ; Each item is a key word identifying a status @@ -2776,7 +2781,7 @@ END; -GET CURRENT DIAGNOSTICS variable = PG_CONTEXT , ... ; +GET CURRENT DIAGNOSTICS variable { = | := } PG_CONTEXT , ... ; diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y index 3fd6655e1b..c0cb58530b 100644 --- a/src/pl/plpgsql/src/pl_gram.y +++ b/src/pl/plpgsql/src/pl_gram.y @@ -796,7 +796,12 @@ decl_defkey : assign_operator | K_DEFAULT ; -assign_operator : '=' /* not documented because it might be removed someday */ +/* + * Ada-based PL/SQL uses := for assignment and variable defaults, while + * the SQL standard uses equals for these cases and for GET + * DIAGNOSTICS, so we support both. FOR and OPEN only support :=. + */ +assign_operator : '=' | COLON_EQUALS ; -- 2.40.0