大白糖奶兔的Blog
大白糖奶兔的Blog
数据库第八章-函数

一、数据库编程:

  • 函数
  • 存储过程
  • 触发器

二、函数

1、函数的基本格式

create [or replace] function function_name (argument)
returnes return_datatype as $variable_name$
 declare
 declaration
 [...]
 begin
 [...]
 <function_body>
 [...]
 rturn {variable_name | value}
 END; language plpgsql

2、参数说明

function_name:函数名
[or replace]:是否替换现有函数的可选项
declare:定义参数(参数名写在前面,类型写在后面)
begin ~ end:中间写函数体
return:返回值数据类型(基础类型、复合或域类型,也可以引用表列的类型)
language:指定实现该函数的语言名称(SQL、C、Python......)

3、案例一

通过传入学号查询学生姓名

create or replace function ret_name(p_sno student.sno%type)
returns student.sname%type
as $$
declare
    v_sname student.sname%type;
begin
    select sname into v_sname from student where sno=p_sno;
    if v_sname is not null then
        return v_sname;
    else
        return '无此学号';
    end if;
end;
$$ language plpgsql;
https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_b7fac4d6dbd9948d95b3132a50327d58.jpg

执行结果

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_05968f33d10221c905de9db96a22bb34.jpg

调用函数

select ret_name('201215121');
https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_5e9045edb004633a318b03fbd781157f.jpg
select ret_name('201215129');
https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_9ca98fda59ac1a5d1113782a25129a0c.jpg

3、案例二

通过传入学生学号查询该学生选课数量

create or replace function stu_sc_counts(p_sno student.sno%type)
returns integer
as $$
declare
    v_counts integer;
    v_sname student.sname%type;
begin
    select sname into v_sname from student where sno=p_sno;
    if v_sname is null then
        v_counts:=-100;--没有这个学号
    else
        select count(*) into v_counts from sc where sno=p_sno;
    end if;
    return v_counts;
end
$$ language plpgsql;

在函数中使用特殊值来表示函数执行过程中的错误(例如没有找到正确的数据)
或者返回特殊的字符串

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_c33c801cd87679f3d0bdc4b29a4b206b.jpg

查询学生选修课程数

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_a6530edd6bbc1793c037de7b1f0f3725.jpg

在student表中没有v_sno学号学生返回-100

https://yczbest.cn/wp-content/uploads/2020/08/wp_editor_md_1d092ac5955740848621e57f7dfa1c79.jpg

此函数也可以不定义任何变量

create or replace function stu_sc_counts(p_sno student.sno%type)
returns integer
as $$
begin

    if (select sname from student where sno=p_sno) is null then
        v_counts:=-100;--没有这个学号
    else
        select count(*) into v_counts from sc where sno=p_sno;
    end if;
    return v_counts;
end
$$ language plpgsql;

发表评论

textsms
account_circle
email

大白糖奶兔的Blog

数据库第八章-函数
一、数据库编程: 函数 存储过程 触发器 二、函数 1、函数的基本格式 create [or replace] function function_name (argument) returnes return_datatype as $variable_name$ decl…
扫描二维码继续阅读
2020-08-14
Title - Artist
0:00