首页 / 更多教程 / 辛星浅析PL/pgsql语法(上)
辛星浅析PL/pgsql语法(上)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了辛星浅析PL/pgsql语法(上),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2574字,纯文字阅读大概需要4分钟。
内容图文
![辛星浅析PL/pgsql语法(上)](/upload/InfoBanner/zyjiaocheng/456/ad5ed2d02caf4128b22c2269a0afb0e2.jpg)
第一,调用时机
其中PL/pgsql的函数被第一次调用的时候,其函数内的源代码会被解析为二进制指令树,但是对于函数内的表达式还有一些指令,只有在被首次使用的时候,pgsql才会给它制定执行计划,而且这个执行计划会在本次的session中被反复使用。一般来说,这么做是合理的,通常一个session中的使用情景都是差不多的。
但是这么做可能会产生问题,那就是如果我们动态的修改了相应的数据库对象,就有可能会产生问题。而且需要注意的是,如果在一个条件语句中,有部分SQL命令或者表达式没有被使用到,那么plpgsql解释器在本次调用中将不会为其准备执行计划。
第二,函数创建语法
下面是我们通常创建一个函数的格式:
CREATE FUNCTION populate() RETURNS integer AS $$
DECLARE
-----声明若干变量
BEGIN
PERFORM my_function();
END;
$$ LANGUAGE plpgsql;
在上面的格式中,其中PERFORM语句的执行计划将会引用my_function对象的oid。如果在这之后,如果我们重建了my_function()函数,那么populate函数将无法找到原有my_function函数的oid。
为了解决这类问题,我们可以选择重建populated函数,或者建立一个新的会话,从而让pgsql来重新编译该函数。通常我们在创建一个函数的时候使用CREATE OR REPLACE FUNCTION命令。
因此我们在plpgsql中直接出现的sql命令再每次执行的时候必须使用相同的表和字段,也就是说,我们不能将函数的参数用作SQL命令的表名或者字段名。如果我们想绕开这个限制,我们可以使用plpgsql中的execute语句来动态的构建命令,它会导致的问题就是每次执行的时候都需要构造一个新的命令计划。
使用plpgsql函数的一个非常重要的优势就是可以提高程序的执行效率,因为原有的sql调用需要在客户端与服务器之间反复传递数据,这样不仅增加了进程间通讯所产生的开销,而且也会加大网络IO的开销。
第三,基本结构
由于plpgsql是一种块结构语言,因此函数定义的所有文本都必须写到一个块中,其中块内的每个声明和每条语句都必须以分号结束。块之间是可以嵌套的,而且子块的END关键字后面必须用分号结束,不过对于函数体的最后一个END关键字,分号可以省略。
下面是一个常见的格式范例:
[ << label >> ]
[DECLARE 变量声明]
BEGIN
其他语句;
END [label];
其中在plpgsql中,有两种注释风格,其中双破折号也就是--表示单行注释,而/* */则是多行注释,这里借鉴了C语言中的多行注释风格。
需要注意的是,在语句块前面的声明段中定义的变量在每次进入语句块时都会将声明的变量初始化为缺省值,而不是每次函数调用时初始化一次。
版权声明:本文为博主原创文章,未经博主允许不得转载。
辛星浅析PL/pgsql语法(上)
标签:辛星 pgsql postgresql plpgsql 语法
本文系统来源:http://blog.csdn.net/xinguimeng/article/details/47817167
内容总结
以上是互联网集市为您收集整理的辛星浅析PL/pgsql语法(上)全部内容,希望文章能够帮你解决辛星浅析PL/pgsql语法(上)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。