在数据库的测试实验中,我们竟成需要通过循环进行基本的功能验证测试,在 Oracle 中通过 for ... Loop 循环,同样可以在 openGauss 中实现。
首先构建一个测试表:
postgres=# create table enmo as select row_number() OVER (ORDER BY name) id ,name from pg_settings;
INSERT 0 542
postgres&#61;# select * from enmo where id <10;
id | name
----&#43;--------------------------------
1 | DateStyle
2 | FencedUDFMemoryLimit
3 | IntervalStyle
4 | RepOriginId
5 | TimeZone
6 | UDFWorkerMemHardLimit
7 | acce_min_datasize_per_thread
8 | acceleration_with_compute_pool
9 | advance_xlog_file_num
(9 rows)
创建一个包含一定功能的 Loop 函数&#xff1a;
postgres&#61;# create or replace function enmoloop(em1 integer[],em2 bigint) returns
postgres-# void AS $$
postgres$# declare ini integer;
postgres$# declare num integer;
postgres$# begin
postgres$# ini :&#61;1;
postgres$# num &#61; 1;
postgres$# for ini in 1..em2 loop
postgres$# UPDATE enmo SET id&#61;em1[num] &#43; 2020 WHERE id &#61; ini;
postgres$# num &#61; num &#43;1;
postgres$# if (num>6) then
postgres$# num &#61; 1;
postgres$# end if;
postgres$# end loop;
postgres$# end;
postgres$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
调用这个函数&#xff1a;
postgres&#61;# select enmoloop(array[1,4,5,6,7,8],1000);
enmoloop
----------
(1 row)
检查数据情况&#xff1a;
postgres&#61;# select * from enmo where id <10;
id | name
----&#43;------
(0 rows)
postgres&#61;# select * from enmo where id <2022;
id | name
------&#43;---------------------------------
2021 | DateStyle
2021 | acce_min_datasize_per_thread
2021 | allow_concurrent_tuple_update
2021 | archive_timeout
2021 | audit_dml_state
2021 | audit_grant_revoke
2021 | audit_space_limit
2021 | autoanalyze
2021 | autovacuum_io_limits
...
在 openGauss 和 Oracle 的上手实践中&#xff0c;对于 DBA 们事实上&#xff0c;是非常友好的。