添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

结构控制和循环介绍:

作为编程语言中极为重要的知识,控制和循环可以降低代码量和减少人的工作量。在PL/PGSQL中实现了常用的控制结构和循环方法,灵活使用确实可以用来提高数据库查询的效率。

结构控制:

1. 结构:IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF

CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional01(IN num integer,OUT result_str varchar(20)) AS
$BODY$
BEGIN
   IF num <= 0 THEN
     result_str = '小于等于0';
   ELSIF num <= 100 THEN
     result_str = '(0-100]';
   ELSIF num <= 1000 THEN
     result_str = '(100-1000]';
     result_str = '1000以上';
   END IF;
$BODY$
LANGUAGE plpgsql;

输出示例:

2. 结构:CASE ... WHEN ... THEN ... ELSE ... END CASE

CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional02(IN num integer,OUT result_str varchar(20)) AS
$BODY$
BEGIN
CASE num
    WHEN 1,2,3,4,5 THEN
        result_str = '1-5之间';
	WHEN 7,8,9,10,11 THEN
     result_str = '7-11之间';
    WHEN 12,13,14,15,16 THEN
     result_str = '12-16之间';
     result_str = '其他的';
END CASE;
$BODY$
LANGUAGE plpgsql;

输出示例:

3. 结构:CASE WHEN ... THEN ... ELSE ... END CASE

CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional03(IN num integer,OUT result_str varchar(20)) AS
$BODY$
BEGIN
       WHEN num <= 0 THEN
           result_str = '小于等于0';
       WHEN num <= 100 THEN
           result_str = '(0-100]';
       WHEN num <= 1000 THEN
           result_str = '(100-1000]';
           result_str = '1000以上';
   END CASE; 
$BODY$
LANGUAGE plpgsql;

输出示例:

1. LOOP循环

CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional04(OUT loopcnt integer) AS
$BODY$
DECLARE counter integer = 1;
BEGIN
	  EXIT WHEN counter > 100; -- 条件满足时退出循环
	  counter := counter+1;
	  CONTINUE WHEN counter = 50; -- 条件满足时,跳过下边的代码进入下一次循环
	  RAISE notice '这是第%次循环',counter;
   END LOOP;
   loopcnt = counter;
$BODY$
LANGUAGE plpgsql;

输出示例:

2. WHILE循环

CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional05(OUT loopcnt integer) AS
$BODY$
DECLARE counter integer = 1;
BEGIN
	WHILE counter<=100 LOOP
		RAISE notice '这是第%次循环',counter;
		counter:=counter+1;
	END LOOP;
    loopcnt = counter;
$BODY$
LANGUAGE plpgsql;

输出示例:

3. FOR循环

-- IN可以跟子查询
CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional06()
RETURNS Void AS
$BODY$
DECLARE counter integer = 1;
BEGIN
    RAISE notice '--------------';
	FOR i IN 1..10 LOOP  
        RAISE notice '这是第%次循环',i;
	END LOOP;
	RAISE notice '--------------';
	FOR i IN REVERSE 10..1 LOOP
        RAISE notice '这是倒序的第%次循环',i;
	END LOOP;
	RAISE notice '--------------';
	FOR i IN 1..10 BY 3 LOOP  --间隔2个数字
        RAISE notice '这是间隔2个数的第%次循环',i;
	END LOOP;
$BODY$
LANGUAGE plpgsql;

输出示例:

4. FOREACH循环

-- 实现传入数组的累加功能
CREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional07(IN intarray int[],OUT resultnum integer)AS
$BODY$
DECLARE
  x int;
  tmp integer := 0;
BEGIN
	FOREACH x IN ARRAY intarray 
		RAISE notice '这是%',x;
		tmp := tmp + x;
	END LOOP;
	resultnum = tmp;
$BODY$
LANGUAGE plpgsql;

输出示例:

结构控制和循环介绍: 作为编程语言中极为重要的知识,控制和循环可以降低代码量和减少人的工作量。在PL/PGSQL中实现了常用的控制结构和循环方法,灵活使用确实可以用来提高数据库查询的效率。结构控制:1. 结构:IF ... THEN ... ELSIF ... THEN ... ELSE ... END IFCREATE OR REPLACE FUNCTION mydb.mysc.learn_conditional01(IN num integer,OUT result_st...
本文实例讲述了postgreSQL存储过程用法。分享给大家供大家参考,具体如下: 转了N多的SQL语句,可是自己用时,却到处是坑啊,啊,啊!!!!!!!!!!!!!!! 想写一个获取表中最新ID值. CREATE TABLE department( ID INT PRIMARY KEY NOT NULL, d_code VARCHAR(50), d_name VARCHAR(50) NOT NULL, d_parentID INT
PL/pgSQL的控制结构是最重要及最有用的一部分了,在实际工作场景都离不开业务处理逻辑,在写PL/pgSQL时,利用控制结构来操作数据。PL/pgSQL支持的控制结构与其他语言几乎差不多,比如:条件、循环、异常等,下面就分别介绍控制结构的使用。 对于条件控制结构,支持IF与CASE两种,IF语句有如下三种写法: if ... then ... end if if ... then ... else ... end if if ... then ... elsif ... then ... el
IF ... THEN...END IF; IF ... THEN ... ELSE...END IF; IF ... THEN ... ELSEIF ... THEN ... END IF; IF ... THEN ... ELSEIF ... THEN ... ELSE...END IF; LOOP 循环语句 1、使用 IF 退出循环 IF… THEN
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。本课程作为PostgreSQL数据库管理一,主要讲解以下内容: 1.     PostgreSQL 存储过程基本知识2.     PostgreSQL 用户自定义函数3.     PostgreSQL 控制结构4.     PostgreSQL 游标和存储过程5.     PostgreSQL 索引6.     PostgreSQL 视图7.     PostgreSQL 触发器8.     PostgreSQL 角色、备份和还原9.     PostgreSQL 表空间管理
var_count := 0; while var_count < 1000 loop execute('INSERT INTO "boy"("name", "age") VALUES (''a'', 11)'); execute('INSERT INTO "boy"("name", "age") VALUES (''a'', 12)'); execute('INSERT INTO "boy"("name", CREATE OR REPLACE FUNCTION p_fx_*** ( OUT v_row INTEGER, OUT v_rote varchar(50), OUT v_log varchar(50)) AS $$ DECLARE BEGIN select count(*) into v_row from *插入表的名字*; v_rote := ...
业务需求:需要创建一个存储过程调度五个存储过程,思路使用FOR循环获取表名,由于存储过程是P_加表名,定义一个变量获取存储过程名。 执行存储过程必须判断task表里执行的状态,如果是0则执行存储过程,并更新task里的状态和执行时间。 在此遇见两个问题:oracle和POSTSQL还是有很大区别的 遇见一个错误: 1、在执行select into SQL语句的时候会报错,解决方法:先定义一个SQ
MySQL 和 PostgreSQL存储过程语法有一些不同。 MySQL 的存储过程语法使用 BEGIN 和 END 来定义存储过程的开始和结束,并使用 DECLARE 来定义变量。另外,MySQL 使用 CALL 来执行存储过程PostgreSQL存储过程语法使用 CREATE FUNCTION 来创建存储过程,并使用 $n 来定义变量。另外,PostgreSQL 使用 SELECT 或 PERFORM 来执行存储过程。 举个例子: MySQL: DELIMITER // CREATE PROCEDURE test_procedure() BEGIN SELECT 'Hello, World!'; END // DELIMITER ; PostgreSQL: CREATE OR REPLACE FUNCTION test_procedure() RETURNS text AS $$ BEGIN RETURN 'Hello, World!'; $$ LANGUAGE plpgsql; 总的来说,MySQL 和 PostgreSQL存储过程语法上有一些差异,但大体上都是类似的。