PostgreSQL 18 preview - PL/pgSQL 允许使用 => 语法为命名游标参数赋值兼容Oracle
PostgreSQL 18 preview - PL/pgSQL 允许使用 => 语法为命名游标参数赋值兼容Oracle
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=246dedc5d028800b393920184e5e6319c6805253
Allow => syntax for named cursor arguments in plpgsql.
author Tom Lane <[email protected]>
Mon, 3 Mar 2025 23:00:05 +0000 (18:00 -0500)
committer Tom Lane <[email protected]>
Mon, 3 Mar 2025 23:00:13 +0000 (18:00 -0500)
commit 246dedc5d028800b393920184e5e6319c6805253
tree 0339ce27b43220e3eb7f18adbbb417d61b5bc935 tree
parent b6904afae40d94c2f34bc3c94aee1cdbe0bcfbe9 commit | diff
Allow => syntax for named cursor arguments in plpgsql.
We've traditionally accepted "name := value" syntax for
cursor arguments in plpgsql. But it turns out that the
equivalent statements in Oracle use "name => value".
Since we accept both forms of punctuation for function
arguments, it makes sense to do the same here.
Author: Pavel Stehule <[email protected]>
Reviewed-by: Gilles Darold <[email protected]>
Discussion: https://postgr.es/m/CAFj8pRA3d0ARQEMbABa1n6q25AUdNmyO8aGs56XNf9pD4sRMjQ@mail.gmail.com
这个 patch 的主要目的是在 PL/pgSQL 中允许使用 => 语法来为命名游标参数赋值, 兼容Oracle用法。以下是该 patch 的详细解读:
背景
在 PL/pgSQL 中,传统上使用 name := value 语法来为游标参数赋值。然而,Oracle 数据库中使用的是 name => value 语法。由于 PostgreSQL 在函数参数中已经支持这两种语法形式(:= 和 =>),因此在游标参数中也支持这两种语法形式是合理的。
改动内容
语法支持:
该 patch 允许在 PL/pgSQL 中使用 =>语法来为命名游标参数赋值。例如:OPEN cursor_name (param1 => value1, param2 => value2);这与传统的 :=语法是等价的:OPEN cursor_name (param1 := value1, param2 := value2);
代码实现:
该 patch 修改了 PL/pgSQL 的语法解析器,使其能够识别并处理 =>语法。具体来说,它扩展了 pl_gram.y文件中的语法规则,以支持=>作为命名参数赋值的另一种形式。
兼容性:
由于 PostgreSQL 在函数参数中已经支持 =>语法,因此在游标参数中也支持这种语法不会引入任何兼容性问题。这种改动使得 PL/pgSQL 的语法更加灵活,同时也提高了与 Oracle 数据库的兼容性。
总结
这个 patch 的主要目的是在 PL/pgSQL 中增加对 => 语法的支持,以便为命名游标参数赋值。这不仅提高了语法的灵活性,还增强了与 Oracle 数据库的兼容性。该改动是合理的,因为 PostgreSQL 在函数参数中已经支持这两种语法形式。