在 PostgreSQL 中使用循环
本文将讨论和演示如何在 PostgreSQL 中使用循环。
在 PostgreSQL 中使用 for
循环语句
for
循环有一些已定义的属性。最好分配一个在每个循环中递增或递减的变量。
然后,如果你给出一个迭代范围会有所帮助。这是 Postgres 中 FOR
语句的基本结构。
do $$
begin
for i in 1..10 loop
-- some sql query
end loop;
end; $$
在这里,循环将运行 10 次迭代。在 SQL 查询中,我们可以使用 i
的值。
现在,让我们演示一个示例。
postgres=# \d accounts;
Table "public.accounts"
Column | Type | Collation | Nullable | Default
-----------+-----------------------------+-----------+----------+-------------------------------------------
user_id | integer | | not null | nextval('accounts_user_id_seq'::regclass)
username | character varying(50) | | not null |
password | character varying(50) | | not null |
email | character varying(255) | | not null |
contact | character varying(20) | | |
postcode | integer | | |
age | integer | | |
height | integer | | |
timestamp | timestamp without time zone | | | CURRENT_TIMESTAMP
你可以在表名前使用 \d
命令查看表描述。现在,我们想知道前 10 名最年轻用户的用户名。
所以,SQL 将是,
do $$
declare
_record record;
begin
for _record in SELECT username, age
FROM accounts
ORDER BY age asc
LIMIT 10
LOOP
RAISE NOTICE 'Username: % (% years)', _record.username, _record.age;
END LOOP;
END; $$;
输出:
NOTICE: Username: ChDCfhl (13 years)
NOTICE: Username: VmgqJMB (13 years)
NOTICE: Username: MbOTFXt (13 years)
NOTICE: Username: WUKNQYe (13 years)
NOTICE: Username: ldWoKpz (13 years)
NOTICE: Username: uksgPZS (13 years)
NOTICE: Username: YXuaLda (14 years)
NOTICE: Username: PXrxKvO (14 years)
NOTICE: Username: hJQXFHO (14 years)
NOTICE: Username: XxwNIOR (14 years)
这里,_record
是一种特殊类型的 PSQL 变量,用于存储 SQL 查询的结果或返回数据。我们还可以使用 FOR
语句填充表。
在 PostgreSQL 中使用 WHILE
循环语句
在 FOR
循环中,你需要定义变量或迭代的范围。另一方面,WHILE
循环没有任何范围。
它会一直运行,直到满足它的条件。WHILE
语句的基本结构如下所示。
DO $$
DECLARE
-- declare variable if you need
BEGIN
WHILE condition LOOP
-- SQL QUERY / RASIE
-- Increment or decrement variable
-- Otherwise, it may fall into an infinite loop
END LOOP;
END$$;
大多数时候,你需要变量来修改条件内的值。假设,在你的条件下,id>10
;循环将一直运行到 id>10
,但我们不会更改脚本中的 ID。
如果在第一次迭代中,ID 大于 10,并且我们在迭代过程中没有修改它,则 SQL 将无限运行,因为条件始终为真。
我们可以使用几个 SQL 命令。第一个命令将创建一个表;第二个 PL/SQL 将使用 WHILE
循环将数据插入表中。
成功插入数据后,我们将表格中的所有数据都显示出来。
CREATE TABLE randoms(
ID int primary key,
Random int
);
do $$
declare
id INTEGER :=1;
begin
WHILE id < 10 LOOP
INSERT INTO randoms(ID, Random) VALUES(id, random());
id := id+1;
END LOOP;
END; $$;
SELECT * FROM randoms;
输出:
postgres=# CREATE TABLE randoms(
postgres(# ID int primary key,
postgres(# Random int
postgres(# );
CREATE TABLE
postgres=#
postgres=# do $$
postgres$# declare
postgres$# id INTEGER :=1;
postgres$# begin
postgres$# WHILE id < 10 LOOP
postgres$# INSERT INTO randoms(ID, Random) VALUES(id, random());
postgres$# id := id+1;
postgres$# END LOOP;
postgres$# END; $$;
DO
postgres=#
postgres=# SELECT * FROM randoms;
id | random
----+--------
1 | 0
2 | 1
3 | 1
4 | 0
5 | 0
6 | 1
7 | 0
8 | 1
9 | 0
(9 rows)
postgres=#
相关文章
在一个 PostgreSQL 查询中使用多个 WITH 语句
发布时间:2023/03/20 浏览次数:127 分类:PostgreSQL
-
在本教程中,我们将学习如何使用多个 WITH 语句在 PostgreSQL 中使用两个临时表执行查询。
在 Ubuntu 上的 PostgreSQL 中找到配置文件
发布时间:2023/03/20 浏览次数:130 分类:PostgreSQL
-
本文介绍如何在 Ubuntu 上找到 PostgreSQL 数据库的配置文件。
在 PSQL 中运行 SQL 文件
发布时间:2023/03/20 浏览次数:178 分类:数据库
-
本文解释了如何直接从终端/命令行或 psql shell 运行 SQL 文件。为此,你需要指定主机名、端口、用户名和数据库名称。
在 PostgreSQL 中重命名和更改列类型的单个查询
发布时间:2023/03/20 浏览次数:121 分类:PostgreSQL
-
本文介绍如何在 PostgreSQL 中仅使用单个查询来重命名列以及更改其类型。
在 PostgreSQL 中使用 Select 连接列
发布时间:2023/03/20 浏览次数:202 分类:PostgreSQL
-
本文介绍如何在 PostgreSQL 中使用 Select 方法连接列。
在 PostgreSQL 中将平均值舍入到小数点后 2 位
发布时间:2023/03/20 浏览次数:186 分类:PostgreSQL
-
本文介绍如何将 PostgreSQL 中的平均值四舍五入到小数点后 2 位。