SQL笔记 | PostgreSQL存储过程的快速入门

目录

基础语法

编写存储过程

调用存储过程

选择语句

if语句

 CASE语句

LOOP循环语句

WHILE语句

FOR循环语句

整合SQL

统计某张表具有多条数据

查询并返回多条记录(结果集)


基础语法

编写存储过程

简单例子:输入a,得到一个等于a的新值

CREATE OR REPLACE FUNCTION get(a int4)
RETURNS int4 AS $BODY$
declare
	b integer := 0;
begin
	b = a;
	return b;
end
$BODY$
  LANGUAGE plpgsql;

ctrl+s保存存储过程,postgre会自动格式化为

CREATE OR REPLACE FUNCTION "public"."get"("a" int4)
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	b integer := 0;
begin
	b = a;
	return b;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

CREATE OR REPLACE FUNCTION get(a int4)  //创建或者更新函数 get为函数名
RETURNS int4 AS $BODY$ //指定返回值数据类型
declare
    b integer := 0; //申明变量
begin //开始处理数据
    b = a;
    return b;
end
$BODY$
  LANGUAGE plpgsql;

调用存储过程

SELECT get(1)

输出

get

1

选择语句

if语句

如果当a=1时输出b=1,其他情况b=2

语法

(注意此处应该为elsif 非esle if)

if 条件 then 结果1;
ELSIF 条件 then 结果2;
ELSE 结果3;
END IF;
CREATE OR REPLACE FUNCTION "public"."get"("a" int4)
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	b integer := 0;
begin
  if a = 1 then b = 1;
	ELSE b = 2;
	end if;
	return b;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

 CASE语句

语法

 CASE 属性 WHEN 值 then 结果1;
 ELSE 结果2;
 END CASE;

等价

CASE WHEN 条件 then 结果1;
ELSE 结果2;
END CASE;

CREATE OR REPLACE FUNCTION "public"."get"("a" int4)
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	b integer := 0;
begin
  CASE a WHEN 1 then b = 1;
	ELSE b = 2;
	end case;
	return b;	
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

LOOP循环语句

语法

LOOP
    循环语句;

    IF 条件 THEN
        EXIT; 
    END IF; 
END LOOP;

CREATE OR REPLACE FUNCTION "public"."get"("a" int4)
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	b integer := 0;
begin
  LOOP
	    b = b + a + 1;
	IF b > 10 THEN
		EXIT; 
	END IF; 
END LOOP;
	return b;	
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

WHILE语句

语法

WHILE search_condition LOOP
    statement_list;
END LOOP;

CREATE OR REPLACE FUNCTION "public"."get"("a" int4)
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	b integer := 0;
begin
WHILE  b < 10 LOOP
	   b = b + a + 1;
END LOOP;
	return b;	
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

FOR循环语句

语法

//表示var从1到10

FOR var IN 1..10 LOOP
    statement_list;
END LOOP;

CREATE OR REPLACE FUNCTION "public"."get"("a" int4)
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	b integer := 0;
begin

FOR i IN 1..10 LOOP
	b = b + i + a + 1;
END LOOP;
	return b;	
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

整合SQL

统计某张表具有多条数据

CREATE OR REPLACE FUNCTION "public"."get"()
  RETURNS "pg_catalog"."int4" AS $BODY$
declare
	total integer := 0;
begin
  SELECT COUNT(*) INTO total from student;
	return total;	
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

查询并返回多条记录(结果集)

查询多行单列的情况

CREATE OR REPLACE FUNCTION "public"."get"()
  RETURNS SETOF "pg_catalog"."varchar" AS $BODY$
declare
	res VARCHAR;
begin
for res in
  SELECT  role_name FROM role
	LOOP
	    RETURN NEXT res;
			END LOOP;
return;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000

查询多行多列的情况

CREATE OR REPLACE FUNCTION "public"."get"()
  RETURNS SETOF "public"."role" AS $BODY$
declare
	res role;
begin
for res in
  SELECT * FROM role
	LOOP
	    RETURN NEXT res;
			END LOOP;
return;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000

输出结果为

get

(1,admin)
(2,teacher)
(3,student)

 或者使用record

CREATE OR REPLACE FUNCTION "public"."function1"()
  RETURNS SETOF "public"."role" AS $BODY$ 
DECLARE 
result record; 
BEGIN 
for result in select * from role loop 
return next result; 
end loop; 
return; 
END; 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值