NOTICE: The current value of counter is 1
NOTICE: The current value of counter in the subblock is 10
NOTICE: The current value of counter in the outer block is 1
NOTICE: The current value of counter in the outer block is 1
- 首先,在外部块中声明变量counter。
- 接着在子块中也声明了一个同名变量。
- 在进入子块之前,变量的值为1。在子块中,我们给变量counter值加10,然后打印出来。注意,这个改变仅影响子块中counter变量。
- 然后,我们通过标签限定符引用外部变量:outer_block.counter
- 最后,我们打印外部块变量,其值保持不变。
本文我们学习PL/pgSQL块结构,通过DO语句可以执行匿名块。
PostgreSql 的PL/pgSQL 块结构本文我们学习PL/pgSQL结构块,包括如何写结构块和执行结构块。什么是结构块PL/pgSQL是结构块语言,因此,PL/pgSQL函数或过程是通过结构块进行组织。完整结构块的语法如下:[ <<label>> ][ DECLARE declarations ]BEGIN statements; .....
只能采用从源码安装的方法,在执行./configure命令时指定较大的数据块,一般也需要指定较大的WAL日志块和WAL日志文件的大小。如果想指定128kb的数据块、128kb的wal日志块,64Mb的WAL日志文件大小,则configure命令如下
./configure --prefix=/usr/local/pgsql0104/pgsql14.1 --with-perl --with-python
--with-blocksize=128 --with-wal-blocksize=128 --wit
使用过Oracle的语句块的都熟悉,在不用创建存储过程或函数就可以执行PLSQL数据库脚本,这样做通常可以用来做一些复杂业务数据初始化的功能。那么在PostgreSQL中也有相应的功能,称为PL/pgSQL,具体语法如下:
[ <<label>> ]
[ DECLARE
declarations ]
BEGIN
statements
END [ label ];
语句块由两部分组成:声明部分与主体部分,声明部分是可选的,主体部分是必须的,在主体部分最后的END使用
匿名代码块介绍:
匿名代码块是在PostgreSQL 9.X版本引入的新功能【注:9.0以下不支持,可通过select version()脚本确认自己使用的数据库版本】,通过DO关键字指定执行代码块,其功能和函数类似,相当于轻量版的函数,但不能传参数和返回值。适合进行一些较为复杂的一次性查询,在日常中使用可以大大降低一些重复脚本的执行的人力成本。
准备工作——创建数据表:
在开始使用匿名代码块之前,首先创建一张要操作的数据表作为函数中的操作对象。
create ta...
PostgreSQL 块语句(也称为匿名代码块)可以使用 `RETURN` 语句返回结果。在块语句内部,你可以使用 PL/pgSQL 语言来编写逻辑。
以下是一个示例,演示如何在块语句内部使用 `RETURN` 语句返回结果:
```SQL
DO $$
DECLARE
result INTEGER := 0;
BEGIN
result := 1 + 2;
RETURN result;
$$ LANGUAGE plpgsql;
在上面的代码中,我们定义了一个匿名代码块,其中声明了一个名为 `result` 的整数变量。在代码块的主体内部,我们将 `result` 的值设置为 1 加上 2,然后使用 `RETURN` 语句返回 `result` 的值。
要执行该代码块并返回结果,可以使用 `SELECT` 语句来调用它:
```SQL
SELECT * FROM (DO $$ ... $$ LANGUAGE plpgsql) subquery;
这将返回一个包含一个名为 `?column?` 的列的数据集,其中包含了我们在代码块中返回的结果。
如果你想要在代码块中返回更复杂的数据结构,例如表格或记录,可以使用 `RETURN QUERY` 语句返回查询结果集。例如:
```SQL
DO $$
BEGIN
RETURN QUERY SELECT id, name FROM users;
$$ LANGUAGE plpgsql;
在上面的代码块中,我们使用 `RETURN QUERY` 语句返回了一个查询结果集,该结果集包含了 `users` 表格中的 `id` 和 `name` 列。结果集将作为代码块的返回值返回。