1.创建表:
create table t_dept(
deptno integer key primary,
dname varchar2(10),
loc varchar2(50)
);
2.插入数据:
insert into t_dept(deptno,dname,loc) values(10,'研发部','北京');
insert into t_dept(deptno,dname,loc) values(20,'开发部','天津');
insert into t_dept(deptno,dname,loc) values(30,'财务部','上海');
3.用储存过程插入数据
--创建存储过程,并设置参数d_name,loc默认为"NEW YORK
create or replace procedure new_dept(d_name in varchar2,loc in varchar2 :='深圳')
is
dept_no interger; --定义变量
begin
--先得到部门的最大编号
select max(deptno) into dept_no from t_dept; --把最大编号赋值给变量dept_no
--在最大部门编号的基础上加一个值10
dept_no :=dept_no + 10;
--添加数据
insert into t_dept values(dept_no,d_name,loc);
exception
when others then
dbms_output.put_line('添加部门失败');
end;
4.调用存储过程
--因为存储过程要传递参数,所以需要先定义参数
declare
dname varchar2(20) :='行政部';
loc varchar2(30) :='&请输入地址';--运行后自己手动输入
begin
NEW_DEPT(dname,loc);
end;
当然,第四步的时候,我们如果不设置loc,默认地址是‘深圳’。或者直接在定义参数的时候输入地址,无需运行后自己手动输入;&表示运行后手动输入。
5.运行结果:
select * from t_dept;
/*添加了一个id为:40 行政部 长沙
DEPTNO DNAME LOC
10 研发部 北京
20 开发部 天津
30 财务部 上海
40 行政部 长沙
*/
6.删除存储过程:
drop procedure new_dept;
补充:
is as 在存储过程中没有区别,视图中只用as不能用is;游标中只能用is,不能用as。
在select into 的时候有两个异常需要关注 too_many_rows 、no_date_found。
declare
dept_no integer;
begin
select deptno into dept_no from t_dept;--deptno有四个值
dbms_output.put_line(dept_no);
exception
when too_many_rows then
dbms_output.put_line("取出的编号多于一个!");
end;
--no_data_found 没有取出一个数值