结构控制和循环介绍:
作为编程语言中极为重要的知识,控制和循环可以降低代码量和减少人的工作量。在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 在存储过程语法上有一些差异,但大体上都是类似的。