PostgreSQL笔记

阅读: 评论:0

PostgreSQL笔记

PostgreSQL笔记

pl/pgsql即Procedural Language/ Postgres SQL(过程化sql语言),是Postgresql数据库对sql语句的扩展,可以在pl/pgsql代码块内定义多条sql语句,每条语句以分号结束,代码块由begin开始,end结束,代码块的最后一个end可以不加分号。

DO关键字用来执行一段匿名代码块,即在在程序语言过程中一次性执行的匿名函数。代码块可以看做是一段没有参数、没有返回值的函数体。其格式如下:

DO [LANGUAGE lang_name] code;

code

code block代码块实际上为一个字符串,可以用”美元符引用”$$书写字符串常量,$$中间可以包含标签名,可以自由命名,但是不能以数字开头,可以命名为$$,$_$,$a$,$a1$...,该标签名必须成对出现,且大小写敏感。

用DECLARE声明变量(如果不需要声明变量可以不写declare),用BEGIN和END包括需要执行的代码/sql语句,每个语句末尾需要加上分号,BEGIN不加分号,代码块最后一个END后可以省略分号;其格式如下:

DO $body$
BEGINupdate student set name = '张小明' where id = 10010;
END
$body$;
DO $body$
DECLARENEW_NAME varchar(100);
BEGINNEW_NAME:='张'||'小明';update student set name = NEW_NAME where id = 10010;
END
$body$;

lang_name

用来解析code的程序语言的名字,如果缺省,默认为plpgsql,lang_name可以写在code前,也可以写在code后,即

DO code;

等效于下边的

DO LANGUAGE PLPGSQL code;

或者

DO code LANGUAGE PLPGSQL;

这里的code指的是代码块,也就是上边说的内容格式。

一个例子

DO $body$
DECLARESIZES_VALUE varchar(1000);MEASUREMENT_TEMPLATE RECORD;BEGINFOR MEASUREMENT_TEMPLATE IN (SELECT ID FROM CNT_MEASUREMENT_TEMPLATE WHERE DOMAIN_ID IN ('/','RD1','RD2') AND IS_LATEST = TRUE AND (SIZES IS NULL OR SIZES = ''))LOOP-------- split sizes value from CNT_MEASUREMENT_TEMPLATE_SIZE order by seq_no --------SIZES_VALUE = (SELECT ARRAY_TO_STRING(ARRAY(SELECT ALT_LABEL||CASE WHEN COALESCE(LABEL,'') = '' THEN '' ELSE '('||LABEL||')' END FROM CNT_MEASUREMENT_TEMPLATE_SIZE WHERE PARENT_ID = MEASUREMENT_TEMPLATE.ID ORDER BY SEQ_NO),', '));-------- set sizes value for cnt_measurement_template whose sizes value is null or '' --------UPDATE CNT_MEASUREMENT_TEMPLATE SET SIZES = SIZES_VALUE WHERE ID = MEASUREMENT_TEMPLATE.ID;END LOOP;
END;
$body$ LANGUAGE PLPGSQL;

参考

1..html
2..html

本文发布于:2024-01-29 08:13:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648722213911.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:笔记   PostgreSQL
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23