数据库中的函数与过程

From《数据库系统概念》

 

import java.sql.*;

public class DataBase {
    public static void main() {

    }
}

/*
    5.2 函数与过程
        ——我这儿简简单单的过一下,之后在复习下MySQL这块的内容~~~

    5.2.1 声明和调用SQL函数和过程
        案例一:
            create function dept_count(dept_name varchar(20)
                returns integer
                begin
                declare d_count integer
                    select count(*) into d_count
                    from instructor
                    where instructor.dept_name = dept_name
                return d_count
                end

            select dept_name,budget
            from department
            where dept_count(dept_name)>12;

        案例二:
            create function instructor_of(dept_name varchar(20))
                returns table(
                    ID varchar(5)
                    name varchar(20),
                    dept_name varchar(20),
                    salary numeric(8,2)
                return table
                    (select ID,name,dept_name,salary
                    from instructor
                    where instructor.dept_name = instructor.dept_name);

            select *
            from table(instruction_of('Finance'));
            
        案例三:
            create procedure dept_count_proc(in dept_name varchar(20), out d_count integer)
                begin
                    select count(*) into d_count
                    from instructor
                    where instructor.dept_name = dept_count_proc.dept_name;
                end
                
            declare d_count integer;
            call dept_count_proc('Physics',d_count);
            
        知识点:
            关系作为返回结果的函数,被称为表函数。通常,以表为值的函数又可以被看做带参数
            的视图,它通过允许参数将视图的概念更加一般化。
 */

/*
    5.2.2 支持过程和函数语言构造
        
        知识点:
            1.变量通过declare进行声明,通过set语句进行赋值。

            2复合语句,有begin。。。end和begin atomic。。。end版本

            3.支持while语句、repeat语句
                while 布尔表达式 do
                    语句序列
                end while
                
                repeat
                    语句序列
                util 布尔表达式
                end repeat

            4.支持for语句
                declare n integer default 0;
                for r as
                    select budget from department
                    where dept_name='Music'
                do
                    set n=n-r。budget
                end for
                
                解析:
                    程序每次获取查询结果的一行,并存入for循环变量中。语句leave可用来退出循环
                    而iterate表示跳过剩余语句从循环的开始进入下一个元组。
                    
            5.支持if-then-else语句
                if 布尔表达式
                    then 语句或复合语句
                elseif  布尔表达式
                    then 语句或复合语句
                else 语句或复合语句
                end if
            
            6.支持case语句
            
            7.支持发信号通知异常时间,以及声明句柄来处理异常
                //在确保教师能容纳下的前提下注册一个学生
                //如果成功注册,返回0,如果超过教师容量则返回-1
                create function registerStudent(
                        in s_id varchar(5),
                        in s_courseid varchar(8),
                        in s_secid varchar(8),
                        in s_semester varchar(6),
                        in s_year numeric(4,0),
                        out errorMsg varchar(100))
                return integer
                begin
                    declare curEnrol int;
                    select count(*) into curEnrol
                    from takes
                    where course_id=s_courseid and sec_id=s_secid
                        and semester=s.semester and year = s_year;
                     
                    declare limit int;
                    select capacity into limit
                    from calssroom natural join section
                    where course_id = s_sourseid and sec_id = s_secid
                        and semester=s.semester and year = s_year;
                        
                    if(curEnrol < limit)
                        begin
                            insert into takes values
                                (s_id,s_courseid,s_secid,s_semeter,s_year,null)
                                return(0)
                            end
                         //否则,已经到达了课程容量上线
                         set errorMsg = 'Enrollnumljljljljlj'
                         return(-1)
                    end
                         
            
                declare out_of_classroom_seats condition
                declare exit handler for out_of_classroom_seats
                begin
                sequence of statements
                end
 */

/*
    5.2.3 外部语言过程
    
        知识点:
            通常来说,外部语言过程需要处理参数(包括in和out参数)和返回值中的空值。还需要传递操作失败/成功
            的状态,以方便对异常进行处理。这些信息可以通过几个额外的参数来表示:一个指明失败/成功状态的
            sqlstate值,一个存储函数返回值的参数、以及一些指明每个参数/函数结果的值是否为空的指示器变量
            还可以通过其他机制来解决空值问题,例如,可以传递指针而不是值~~~~如果一个函数不关心这些情况,
            可以在声明语句的上方额外添加一行parameter style general指明外部过程/函数只使用说明的变量
            并且不处理空值和异常。
 */

 

转载于:https://www.cnblogs.com/junjie2019/p/10576495.html

你可能感兴趣的:(数据库中的函数与过程)