plsql回顾(2游标、存储过程)

来源:互联网 发布:iphone移动数据不能用 编辑:程序博客网 时间:2024/04/30 07:56

游标使用:

-- Created on 2013/7/5 by ADMIN 
declare 
  -- Local variables here
  i integer;
  cursor c_emp(p_deptno number) is select * from emp e where e.deptno=p_deptno; ---声明游标
  emprow c_emp%rowtype;---定义变量追踪游标类型
begin
  -- Test statements here
  open c_emp(10);---打开游标,有参传参
  loop 
    fetch c_emp into emprow;---讲游标取出的每行数据放入对应行变量
    exit when c_emp%notfound;
    dbms_output.put_line(emprow.empno||' '||emprow.empno||'  '||emprow.deptno);
  end loop;
  close c_emp;---关闭游标
end;


存储过程:

--用存储过程实现根据传入的部门号和job,讲员工工资提高10%
create or replace procedure p_emp
--装参数(分为传入in和传出out两种类型)
(
       l_deptno in number,----传入的参数,不需要写出长度,也不能赋值
       l_job in varchar2,
       l_result out varchar2---用来判断是否正确执行,返回值是‘0000’则正确,返回‘1111’则是错误执行
)
is
--声明变量
       
begin
  l_result := '0000';
  --业务主体语句
       update emp_copy e set e.sal=e.sal*1.1 where e.deptno=l_deptno and e.job=l_job;
       commit;
       exception 
         when others then
           l_result := '1111';
           rollback;

end;


存储过程的调用可以在plsql工具的命令窗口或者是测试窗口,但是最重要的是在java中调用,现在在测试窗口调用测试:

declare 
  -- Local variables here
  i integer;
  l_result varchar2(20);
begin
  -- Test statements here
  p_emp(20,'CLERK',l_result);
  dbms_output.put_line(l_result);
end;


练习:传一个员工号来给这个员工涨工资,规则:如果是10号部门,工资涨10%,20号部门涨20%,30号部门涨30%,其他员工不变,但是最高工资不能超过5000.


create or replace procedure addSal(
       p_empno in number,
       l_result out varchar2
)
is
       l_deptno emp_copy.deptno%type;
       l_sal emp_copy.sal%type;
begin
       l_result := '0000';
       select e.deptno into l_deptno from emp e where e.empno=p_empno;
       if l_deptno=10 then
         update emp_copy e2 set e2.sal=e2.sal*1.1 where e2.empno=p_empno;
       elsif l_deptno=20 then
         update emp_copy e2 set e2.sal=e2.sal*1.2 where e2.empno=p_empno;
       elsif l_deptno=30 then
         update emp_copy e2 set e2.sal=e2.sal*1.3 where e2.empno=p_empno;
       end if;
       select e.sal into l_sal from emp_copy e where e.empno=p_empno;
       if l_sal>5000 then
         update emp_copy e set e.sal=5000 where e.empno=p_empno;
       end if;
       commit;


       exception
         when others then
           l_result := '1111';
           rollback;
end;


关于emp复制表emp_copy的增删改存储过程:


create or replace procedure emp_copy_cdu(
       l_remark in number,----0  增加,1  删除,2  修改
       l_empno in number,
       l_ename in varchar2,
       l_job in varchar2,
       l_mgr in number,
       l_hiredate in varchar2,
       l_sal in number,
       l_comm in number,
       l_deptno in number,
       l_result out varchar2
)
is




begin
        l_result :='0000';
        if l_remark=0 then
         insert into emp_copy values(l_empno,
                                     l_ename,
                                     l_job,
                                     l_mgr,
                                     to_date(l_hiredate,'yyyy-MM-dd'),
                                     l_sal,
                                     l_comm,
                                     l_deptno);
        elsif l_remark=1 then
          delete from emp_copy e where e.empno=l_empno;
        elsif l_remark=2 then
          update emp_copy e set e.ename=l_ename,
                                e.job=l_job,
                                e.mgr=l_mgr,
                                e.hiredate=to_date(l_hiredate,'yyyy-MM-dd'),
                                e.sal=l_sal,
                                e.comm=l_comm,
                                e.deptno=l_deptno where e.empno = l_empno;
        end if;
        commit;
        exception
          when others then
            l_result :='1111';
            rollback;
end;

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 9个月宝宝上肢支撑不好怎么办 宝宝快十一个月了留口水怎么办 两岁宝宝不会自己登着大小便怎么办 小新家的房子被炸了房贷怎么办 怀孕8个月感冒鼻窦炎头疼怎么办 买的全身镜下面的框子坏了怎么办 单位上司姐姐每天要接我上班怎么办 企业微信公众号中的文章边框怎么办 怎么办我在数学答题卡上画了分割线 游泳的时候泳裙飘起来怎么办 两岁宝宝误服了酵素梅怎么办 人被困在山洞里没有氧气怎么办? 一个人太爱你可你不爱他怎么办 牙齿还没掉又长了新牙齿怎么办 两岁宝宝牙齿发黑烂牙怎么办 怀孕八个月被小孩压到肚子了怎么办 在花场上班客人约我出去玩怎么办 小天才电话手表开不了机怎么办 黑色笔芯弄在白色衣服上怎么办 su文件打开是意外的格式怎么办 su卡的动一下就卡怎么办 犀牛vary渲染的太曝光了怎么办 脑子老是乱想幻想控制不住怎么办 猫抓了破了点皮怎么办 小孩子喜欢玩别人家的玩具怎么办 孩子把别人家的玩具玩坏了怎么办 小新和爸妈一起睡觉那他们怎么办 ps画纸画的时候一直在移动怎么办 宝宝磕碰到家具上鼻梁碰破该怎么办 月经推迟11天了怎么办孕测棒单杠 小孩子不小心把蜡笔吃一点怎么办 线切割切割的工件表面有条纹怎么办 苹果手机不能用流量更新吃鸡怎么办 吃鸡更新成雨林如果内存不够怎么办 绝地求生刺激战场背包满了怎么办 绝地求生刺激战场模拟器满了怎么办 绝地求生刺激战场电脑版满了怎么办 绝地求生手游模拟器注册上限怎么办 绝地求生电脑模拟器已达上限怎么办 三星s5锁屏密码忘了怎么办 字画装框的时候起褶皱怎么办