MySQL中使用使用者自定義的函式
阿新 • • 發佈:2020-12-03
函式定義基本公式如下
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;