文档章节

PostgreSql之pgsql 条件和顺序控制

Beaver_
 Beaver_
发布于 2015/05/09 11:28
字数 944
阅读 37
收藏 0
点赞 0
评论 0
  1. if-then 组合:

    if condition then

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

    end if;

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

    例子:

create or replace function doctor_test()
  returns integer AS
$$
declare

begin
	if 1 = 1 then
	   return 1;
	end if;
	
	return 0;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:1.

create or replace function doctor_test()
  returns integer AS
$$
declare

begin
	if 2 = 1 then
	   return 1;
	end if;
	
	return 0;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:0

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare

begin
	if null is null then
	   return 1;
	end if;
	
	return 0;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:1.

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare

begin
	if 1=1 or null then
	   return 1;
	end if;
	
	return 0;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:1

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare

begin
	if 1=1 and null then
	   return 1;
	end if;
	
	return 0;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:0


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

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


2. if -then - else 组合

例如:

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare

begin
	if 2=1  then
	   return 1;
	else 
	   return 2;
	end if;
	
	 	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:2

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

例如:简单case语句:

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare
	i int;

begin
	i := 8;
	case i
	when 1 then
	       return 1;
	when 2 then
	       return 2;
	else
	       return -1;
	
	end case;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:-1

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare
	 

begin
	 
	case true
	when 1=1 then
	       return 1;
	when 2 > 1 then
	       return 2;
	else
	       return -1;
	
	end case;	
end;  
$$language plpgsql immutable ;

select doctor_test();

结果:1

例如:搜索型case语句:

-- Function: doctor_test()

-- DROP FUNCTION doctor_test();

create or replace function doctor_test()
  returns integer AS
$$
declare
	 

begin
	 
	case 
	when 1=1 then
	       return 1;
	when 2 > 1 then
	       return 2;
	else
	       return -1;
	
	end case;	
end;  
$$language plpgsql immutable ;

select doctor_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 表达式是按照从上到下的顺序被依次求值。

© 著作权归作者所有

共有 人打赏支持
Beaver_
粉丝 24
博文 136
码字总数 36878
作品 0
杨浦
程序员
postgresql9.3.9版本部署

安装方式:源码包安装 安装环境:linux—Centos 6.5 下载Postgresql源码包 wget http://ftp.postgresql.org/pub/source/v9.3.9/postgresql-9.3.9.tar.bz2 #地址可更改,需要其他包进 http:/...

Taibai_wu ⋅ 05/18 ⋅ 0

postgresql高可用集群安装

一、hosts and topology structure of pg cluster 1.host infos cluster01node01 192.168.0.108 cluster01node02 192.168.0.109 cluster02_node03 192.168.0.110 2.topology structure prima......

pgmia ⋅ 04/22 ⋅ 0

PostgreSQL 11 preview - 增加强制custom plan GUC开关(plancache_mode),对付倾斜

标签 PostgreSQL , plan cache , generic plan , custom plan , plancache_mode 背景 对于高并发的小事务,使用绑定变量(prepared statement)来缓存执行计划,可以降低简单SQL在sql parse...

德哥 ⋅ 04/18 ⋅ 0

postgresql的安装使用

postgresql介绍全球最先进的开源数据库。作为学院派关系型数据库管理系统的鼻祖,它的优点主要集中在对 SQL 规范的完整实现以及丰富多样的数据类型支持,包括JSON 数据、IP 数据和几何数据等...

fuvip ⋅ 05/07 ⋅ 0

PostgreSQL 数据离散性 与 索引扫描性能(btree and bitmap index scan)

标签 PostgreSQL , 数据离散性 , 扫描性能 , 重复扫 , bitmap index scan , 排序扫描 背景 PostgreSQL中数据的扫描方法很多,常见的有: 1、全表顺序扫描(seqscan) 2、索引+回表扫描(index ...

德哥 ⋅ 04/18 ⋅ 0

Oracle DBA 增值 PostgreSQL,Greenplum 学习计划

标签 PostgreSQL , Oracle , Greenplum 背景 去O很大程度上是国家层面的战略考虑,比如斯诺登事件,最近贸易战的“中兴”事件,使得去O成为一个不可不做的事情。 但是去O喊了若干年,并没有真...

德哥 ⋅ 05/06 ⋅ 0

【Postgresql】postgresql9.3.9版本基于流复制方式双机热备方案

系统环境:centos6.5 数据库版本: postgres9.3.9 虚拟机2台: Master:10.0.2.160 Slave:10.0.2.69 数据存储位置:/usr/local/pgsql/data/ 安装pgsql数据库 创建流复制用户 配置Master端的访问...

Taibai_wu ⋅ 05/18 ⋅ 0

Migration Oracle to PostgreSQL "百家"文档集

标签 PostgreSQL , Oracle 背景 2002 Porting from Oracle to PostgreSQL 《PDF Download》 Agenda SQL Syntax, Functions, Sequences, Etc. Database Server General Characteristics Data......

德哥 ⋅ 05/06 ⋅ 0

PostgreSQL与MySQL的区别收集(转)

特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。...

easonjim ⋅ 05/12 ⋅ 0

PostgREST:将PostgreSQL的表已RESTful API输出(如以json格式输出数据)

昨天看到一个工具PostgREST:能把PostgreSQL的表以json格式读取出来,觉得很有意思,今天就看了下。 这个工具的主页在https://github.com/PostgREST 0.生成文档: 可以直接在这看: https://p...

seng ⋅ 05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 15分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 19分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 21分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 40分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 47分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 48分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 51分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 51分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 57分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部