1. 程式人生 > 實用技巧 >MySQL中使用使用者自定義的函式

MySQL中使用使用者自定義的函式

函式定義基本公式如下

create function function_name(function_param param_type)
returns return_type
begin 
	function_body
end

過程定義的基本公式(與函式類似)

create procedure procedure_name(in in_param_name param_type, out out_param_name param_type)
begin
	procedure_body
end

注: 包含在begin與end中間是作為一個單獨的事務來執行

其他語法

while 布林表示式 do
	語句序列;
end while;

repeat 	語句序列;
util 布林表示式
end repeat

if 布林表示式
	then 語句或複合語句
elseif 布林表示式
	then 語句或複合語句
else 語句或複合語句
end if

例項

向表中插入一個學生,完成課程登記,對應《資料庫系統概念》p99

# 函式例項
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) > 0;

# 過程例項
create procedure instructor_of (dept_name varchar(20))
    begin
            select ID,name,dept_name,salary
            from instructor
            where instructor.dept_name = dept_name;
    end

call instructor_of('Finance');

# 插入學生
create function registerStudent5(
        s_id varchar(5),
        s_courseid varchar(8),
        s_secid varchar(8),
        s_semester varchar(6),
        s_year numeric(4, 0),
        errorMsg varchar(100)
) returns integer
begin
        declare currEnrol integer;
        declare relLimit integer;

        select count(*) into currEnrol
        from takes
        where course_id = s_courseid and sec_id = s_secid
                and semester = s_semester and year = s_year;

        select capacity into relLimit
        from classroom natural join section
        where course_id = s_courseid and sec_id = s_secid
                and semester = s_semester and year = s_year;

        if(currEnrol < relLimit) then
            begin
                insert into takes values
                    (s_id, s_courseid, s_secid, s_semester, s_year, null);
                return (0);
            end;
        else
            set errorMsg = 'Error';
            return (-1);
        end if;
end;