首页 > 代码库 > 创建存储过程和函数【weber出品必属精品】
创建存储过程和函数【weber出品必属精品】
一、什么是存储过程和函数
1. 是被命名的pl/sql块
2. 被称之为pl/sql子程序
3. 与匿名块类似,有块结构:
声明部分是可选的(没有declare关键字)
必须有执行部分
可选的异常处理部分
二、匿名块和子程序之间的区别
三、存储过程:语法
CREATE [OR REPLACE] PROCEDURE procedure_name[(argument1 [mode1] datatype1,argument2 [mode2] datatype2,. . .)]IS|ASprocedure_body;
create or replace procedure add_dept isv_deptment_id dept.deptno%type;v_deptment_name dept.dname%type;begin v_deptment_id :=60; v_deptment_name := ‘YWB‘; insert into dept(deptno,dname) values(v_deptment_id,v_deptment_name); commit; dbms_output.put_line(‘插入了:‘||sql%rowcount||‘行‘); end;
使用匿名块调用存储过程:
begin add_dept;end;
四、函数:
CREATE [OR REPLACE] FUNCTION function_name [(argument1 [mode1] datatype1, argument2 [mode2] datatype2, . . .)]RETURN datatypeIS|ASfunction_body;
函数与存储过程的区别:函数必须返回数据,存储过程可以返回数据,也可以不返回数据
create or replace function check_sal return boolean is dept_id emp.deptno%type :=10; emp_no emp.empno%type :=7788; salary emp.sal%type; avg_sal emp.sal%type;beginselect sal into salary from emp where empno=emp_no; select avg(sal) into avg_sal from emp where deptno=dept_id; if salary>avg_sal then return true; else return false; end if; exception when no_data_found then return null; end;
在匿名块中调用函数:
begin if( check_sal is null) then dbms_output.put_line(‘由于程序异常,输出null‘); elsif (check_sal) then dbms_output.put_line(‘工资高于平均工资‘); else dbms_output.put_line(‘工资低于平均工资‘); end if; end;
给函数传递参数:
create or replace function check_sal(empno number) return boolean is dept_id employees.department_id%type; sal employees.salary%type; avg_sal employees.salary%type;begin select salary, department_id into sal, dept_id from employees where employee_id = empno; select avg(salary) into avg_sal from employees where department_id = dept_id; if sal > avg_sal then return true; else return false; end if;exception when no_data_found then return null;end;create or replace function check_sal(empno number) return number is dept_id employees.department_id%type; sal employees.salary%type; avg_sal employees.salary%type;begin select salary, department_id into sal, dept_id from employees where employee_id = empno; select avg(salary) into avg_sal from employees where department_id = dept_id; if sal > avg_sal then return 1; elsif (sal = avg_sal) then return 2; else return 3; end if;exception when no_data_found then return null;end;begin if (check_sal(200) is null) then dbms_output.put_line(‘由于程序异常,输出NULL‘); elsif (check_sal(200) = 1) then dbms_output.put_line(‘工资高于平均工资‘); elsif (check_sal(200) = 2) then dbms_output.put_line(‘工资等于平均工资‘); else dbms_output.put_line(‘工资低于平均工资‘); end if;end;
创建存储过程和函数【weber出品必属精品】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。