PostgreSql之pgsql 条件和顺序控制

前端之家收集整理的这篇文章主要介绍了PostgreSql之pgsql 条件和顺序控制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. if-then 组合:

    if condition then

    ...一系列可执行语句....

    end if;

    其中,condition是一个布尔类型的变量、常量,或者求值结果为true、false或者null的表达式。condition结果为true,则位于关键字then 后面、配对end if语句之前的可执行语句就会执行。如果condition的结果为false或者null,这些语句不会执行。

    例子:

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare

begin
	if1=1then
	return1;
	endif;
	
	return0;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:1.

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare

begin
	if2=1then
	return1;
	endif;
	
	return0;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:0

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare

begin
	ifnullisnullthen
	return1;
	endif;
	
	return0;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:1.

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare

begin
	if1=1ornullthen
	return1;
	endif;
	
	return0;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:1

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare

begin
	if1=1andnullthen
	return1;
	endif;
	
	return0;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:0


注:有时候,我们无法知道表达式中的每一个值。这是因为数据库允许null值或者值缺失。如果一个表达式包含null值,那么表达式的结果又会是什么?

对每个布尔值表达式中的每个变量 ,你一定要仔细考虑变量是null带来的后果。同时还要考虑短路现象。


2. if -then - else 组合

例如:

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare

begin
	if2=1then
	return1;
	else
	return2;
	endif;
	
		
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:2

3.case 语句
利用case语句可以在多个可能的系列中选择一个语句执行。简单的case语句和java,c,c++中的switch case 功能相似。
简单的case语句:通过值来关联一个或者多个pgsql语句。根据表达式的返回值来选择哪一个语句被执行。case 语法中的expression和result元素可以是一个标量,也可以是能够得到标量结果的表达式。
搜索形式的case语句:根据一系列布尔条件来确定要执行的pgsql语句系列。那些和第一个求值结果true的条件相关联的语句被执行。

例如:简单case语句:

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare
	iint;

begin
	i:=8;
	casei
	when1then
	return1;
	when2then
	return2;
	else
	return-1;
	
	endcase;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:-1

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare
	

begin
	
	casetrue
	when1=1then
	return1;
	when2>1then
	return2;
	else
	return-1;
	
	endcase;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:1

例如:搜索型case语句:

--Function:doctor_test()

--DROPFUNCTIONdoctor_test();

createorreplacefunctiondoctor_test()
returnsintegerAS
$$
declare
	

begin
	
	case
	when1=1then
	return1;
	when2>1then
	return2;
	else
	return-1;
	
	endcase;	
end;
$$languageplpgsqlimmutable;

selectdoctor_test();

结果:1

注意:和简单case语句一样,

(1)一旦某些语句被执行,整个执行也就结束了。即便有多个表达式求值结果都是true,也只有和第一个表达式关联的语句被执行。

(2)else语句是可选的。如果没指定else,并且没有一个表达式的结果是true,就会出现异常错误

如:

错误: 没有找到CASE

提示: 在CASE语句结构中丢失ELSE部分

背景: 在CASE的第7行的PL/pgsql函数doctor_test()


********** 错误 **********


错误: 没有找到CASE

sql 状态: 20000

指导建议:在CASE语句结构中丢失ELSE部分

上下文:在CASE的第7行的PL/pgsql函数doctor_test()

(3)when 表达式是按照从上到下的顺序被依次求值。

原文链接:https://www.f2er.com/postgresql/195207.html

猜你在找的Postgre SQL相关文章