• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >PostgreSQL > PostgreSQL教程(十九):SQL语言函数

PostgreSQL教程(十九):SQL语言函数

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了postgresql教程,postgresql安装教程,postgresql使用教程,postgresql视频教程,postgresql数据库教程等相关知识,希望本文的分享对您有所帮助

一、基本概念:

    SQL函数可以包含任意数量的查询,但是函数只返回最后一个查询(必须是SELECT)的结果。在简单情况下,返回最后一条查询结果的第一行。如果最后一个查询不返回任何行,那么该函数将返回NULL值。如果需要该函数返回最后一条SELECT语句的所有行,可以将函数的返回值定义为集合,即SETOF sometype。

    SQL函数的函数体应该是用分号分隔的SQL语句列表,其中最后一条语句之后的分号是可选的。除非函数声明为返回void,否则最后一条语句必须是SELECT。事实上,在SQL函数中,不仅可以包含SELECT查询语句,也可以包含INSERT、UPDATE和DELETE等其他标准的SQL语句,但是和事物相关的语句不能包含其中,如BEGIN、COMMIT、ROLLBACK和SAVEPOINT等。

    CREATE FUNCTION命令的语法要求函数体写成一个字符串文本。通常来说,该文本字符串常量使用美元符($$)围住,如:
      CREATE FUNCTION clean_emp() RETURNS void AS $$
        DELETE FROM emp WHERE salary < 0;
    $$ LANGUAGE SQL;
 </div>
    最后需要说明的是SQL函数中的参数,PostgreSQL定义$1表示第一个参数,$2为第二个参数并以此类推。如果参数是复合类型,则可以使用点表示法,即$1.name访问复合类型参数中的name字段。需要注意的是函数参数只能用作数据值,而不能用于标识符,如:
      INSERT INTO mytable VALUES ($1);   --合法
    INSERT INTO $1 VALUES (42);          --不合法(表名属于标示符之一)
    </div>
二、基本类型:
    
    最简单的SQL函数可能就是没有参数且返回基本类型的函数了,如:
      CREATE FUNCTION one() RETURNS integer AS $$
        SELECT 1 AS result;
    $$ LANGUAGE SQL;
 </div>
    下面的例子声明了基本类型作为函数的参数。
      CREATE FUNCTION add_em(integer, integer) RETURNS integer AS $$
        SELECT $1 + $2;
    $$ LANGUAGE SQL;
    # 通过select调用函数。
    postgres=# SELECT add_em(1,2) AS answer;
     answer
    --------
          3
    (1 row)
 </div>
    在下面的例子中,函数体内包含多个SQL语句,它们之间是用分号进行分隔的。
      CREATE FUNCTION tf1 (integer, numeric) RETURNS numeric AS $$
        UPDATE bank SET balance = balance - $2 WHERE accountno = $1;
        SELECT balance FROM bank WHERE accountno = $1;
    $$ LANGUAGE SQL;
</div>

三、复合类型:

    见如下示例:

    1). 创建数据表,这样与之对应的复合类型也随之生成。
      CREATE TABLE emp (
        name        text,
        salary      numeric,
        age         integer,
    );
 </div>
    2). 创建函数,其参数为复合类型。在函数体内,可以像引用基本类型参数那样引用复合类型,如$1。访问复合类型的字段使用点表达式即可,如:$1.salary。
     CREATE FUNCTION double_salary(emp) RETURNS integer AS $$
        SELECT ($1.salary * 2)::integer AS salary;
    $$ LANGUAGE SQL;
 </div>
    3). 在select语句中,可以使用emp.*表示emp表的一整行数据。
      SELECT name, double_salary(emp.*) AS dream FROM emp WHERE age > 30;
 </div>
    4). 我们也可以使用ROW表达式构造自定义的复合类型,如:
      SELECT name, double_salary(ROW(name, salary*1.1, age)) AS dream FROM emp;
 </div>
    5). 创建一个函数,其返回值为复合类型,如:
      CREATE FUNCTION new_emp() RETURNS emp AS $$
        SELECT ROW('None', 1000.0, 25)::emp;
    $$ LANGUAGE SQL;
 </div>
    6). 调用返回复合类型的函数。
      SELECT new_emp();
 </div>
    7). 调用返回复合类型的函数,同时访问该返回值的某个字段。
      SELECT (new_emp()).name;
 </div>

四、带输出参数的函数:

    还有一种方法可以用于返回函数执行的结果,即输出参数,如:
 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • CentOS 7下安装PostgreSQL 9.6的教程分享
  • windows PostgreSQL 9.1 安装详细步骤
  • 深入解读PostgreSQL中的序列及其相关函数的用法
  • PostgreSQL教程(二十):PL/pgSQL过程语言
  • PostgreSQL教程(十九):SQL语言函数
  • PostgreSQL教程(十六):系统视图详解
  • PostgreSQL教程(十五):系统表详解
  • PostgreSQL教程(十四):数据库维护
  • PostgreSQL教程(十二):角色和权限管理介绍
  • PostgreSQL教程(十一):服务器配置

相关文章

  • 2017-05-11PostgreSQL中关闭死锁进程的方法
  • 2017-05-11Mac OS上安装PostgreSQL的教程
  • 2017-05-11Windows下PostgreSQL安装图解
  • 2017-05-11PostgreSQL ERROR: invalid escape string 解决办法
  • 2017-05-11Windows下Postgresql数据库的下载与配置方法
  • 2017-05-11PostgreSQL教程(九):事物隔离介绍
  • 2017-05-11Postgre数据库Insert 、Query性能优化详解
  • 2017-05-11Postgresql ALTER语句常用操作小结
  • 2017-05-11windows PostgreSQL 9.1 安装详细步骤
  • 2017-05-11在windows下手动初始化PostgreSQL数据库教程

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • PostgreSQL中关闭死锁进程的方法
    • PostgreSQL教程(十六):系统视图详解
    • PostgreSQL ERROR: invalid escape string 解决办法
    • PostgreSQL教程(十八):客户端命令(2)
    • PostgreSQL 安装和简单使用第1/2页
    • PostgreSQL教程(十七):客户端命令(1)
    • PostgreSQL分区表(partitioning)应用实例详解
    • 深入解读PostgreSQL中的序列及其相关函数的用法
    • PostgreSQL中常用的时间日期脚本使用教程
    • PostgreSQL 创建表分区

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有