东莞网站建设设计价格,移动互联网应用程序指的是什么,东营做营销型网站,怎样可以查到做网站公司--1、什么是游标#xff1f;使用游标的基本步骤是什么#xff1f; /*挡在PL/SQL块中执行查询语句#xff08;SELECT#xff09;和数据操纵语句#xff08;DML#xff09;时#xff0c;Oracle会在内存中分配一个缓冲区#xff0c;缓冲区中包含了处理过程的必需信息…--1、什么是游标使用游标的基本步骤是什么 /*挡在PL/SQL块中执行查询语句SELECT和数据操纵语句DML时Oracle会在内存中分配一个缓冲区缓冲区中包含了处理过程的必需信息包括已经处理完的行数、指向被分析行的指针和查询情况下的活动集即查询语句返回的数据行集。该缓冲区域称为上下文区游标是指向该缓冲区的句柄或指针。*/--2、游标有哪几种类型分别在什么情况下使用 /*1显式游标由用户定义、操作用于处理返回多行数据的SELECT查询。2隐式游标由系统自动进行操作用于处理DML语句和返回单行数据的SELECT查询。*/--3、用游标显示所有部门编号与名称以及其所拥有的员工人数。--方法一declarecursor c_emp is select * from emp;cursor c_dept is select * from dept;v_count number;beginfor v_dept in c_dept loopv_count : 0;for v_emp in c_emp loopif v_emp.deptno v_dept.deptno thenv_count : v_count 1;end if;end loop;dbms_output.put_line(编号 || v_dept.deptno || 是 || v_dept.dname || 部门共有员工 || v_count || 人。);end loop;end;--方法二PS缺失没有员工的部门declarecursor c_temp is (select deptno, dname, count(*) count_pfrom (select d.deptno, d.dnamefrom dept djoin emp e on d.deptno e.deptno) tgroup by deptno, dname);beginfor v_temp in c_temp loopdbms_output.put_line(v_temp.deptno || - || v_temp.dname || - || v_temp.count_p);end loop;end;--4、用游标属性%rowcount实现输出前十个员工的信息。declarecursor c is (select * from emp);beginfor v in c loopif c%rowcount10 thendbms_output.put_line(c%rowcount || - || v.empno || - || v.ename || - || v.sal);else exit;end if;end loop;end;--5、通过使用游标来显示dept表中的部门名称及其相应的员工列表提示可以使用双重循环。declarecursor c_emp is select * from emp;cursor c_dept is select * from dept;beginfor v_dept in c_dept loopdbms_output.put_line( v_dept.dname || 部门人员列表);for v_emp in c_emp loopif v_emp.deptno v_dept.deptno thendbms_output.put_line( || v_emp.ename);end if;end loop;dbms_output.put_line();end loop;end;--6、接受一个部门号使用For循环从emp表中显示该部门的所有雇员的姓名工作和薪水。declarecursor c_emp is select * from emp where deptno please_enter_deptno;v_dept dept%rowtype;beginselect * into v_dept from dept where deptno please_enter_deptno;dbms_output.put_line(please_enter_deptno || :: || v_dept.dname);dbms_output.put_line();dbms_output.put_line(ename :: job :: sal);for v_emp in c_emp loopdbms_output.put_line(v_emp.ename || :: || v_emp.job || :: || v_emp.sal);end loop;end;--7、编写一个程序块将emp表中前5人的名字及其出的工资等级salgrade显示出来。beginfor v_emp in (select e.ename, s.gradefrom emp ejoin salgrade s on e.sal between s.losal and s.hisal where rownum 5) loopdbms_output.put_line(v_emp.ename || :: grade || v_emp.grade);end loop;end;--8、用带参数的游标输出部门编号为10 30的员工信息。declarecursor c_emp(v_deptno dept.deptno%type) is select * from emp where deptno v_deptno;begindbms_output.put_line(部门编号为10 的员工列表);for v_emp in c_emp(10) loopdbms_output.put_line(v_emp.ename);end loop;dbms_output.put_line(部门编号为30 的员工列表);for v_emp in c_emp(30) loopdbms_output.put_line(v_emp.ename);end loop;end;--9、使用带参数的游标实现接受一个部门名称从emp表中显示该部门的所有雇员的姓名工作和薪水。declarecursor c_emp(v_dname dept.dname%type) is select * from emp where deptno (select deptno from dept where dname v_dname);begindbms_output.put_line(SALES 部门员工名单);for v_emp in c_emp(SALES) loopdbms_output.put_line(v_emp.ename || :: || v_emp.job || :: || v_emp.sal);end loop;end;--10、用游标获取所有收入超过2000的 salesman.declarecursor c_emp is select * from emp;begindbms_output.put_line(收入超过1500的SALESMAN列表);--收入超过2000的salesman没有数据for v_emp in c_emp loopif v_emp.job SALESMAN and v_emp.sal 1500 thendbms_output.put_line(v_emp.ename || :: || v_emp.sal);end if;end loop;end;--11、编写一个PL/SQL程序块从emp表中对名字以A或S开始的所有雇员按他们基本薪水的10%给他们加薪。declarecursor c_emp is select * from emp2 for update;beginfor v_emp in c_emp loopif substr(v_emp.ename,1,1) A or substr(v_emp.ename,1,1) S thendbms_output.put_line(加薪员工 || v_emp.ename || 加薪 || v_emp.sal*0.1);update emp2 set sal sal*1.1 where ename v_emp.ename;end if;end loop;commit;end;--12、emp表中对所有雇员按他们基本薪水的10%给他们加薪如果所增加后的薪水大于5000则取消加薪。beginfor v_emp in (select ename,sal,empno from emp2) loopif v_emp.sal*1.1 5000 thendbms_output.put_line(待加薪的员工 || v_emp.ename);update emp2 set sal sal * 1.1 where empno v_emp.empno;end if;end loop;commit;end;--13、按照salgrade表中的标准给员工加薪15%24%33%42%51% --并打印输出每个人加薪前后的工资。--方法一declarecursor c_emp is(select ename, sal, gradefrom emp2 ejoin salgrade s on e.sal between s.losal and s.hisal) order by ename;beginfor v_emp in c_emp loopupdate emp2 set sal sal * (1((6 - v_emp.grade)*0.01)) where emp2.ename v_emp.ename;dbms_output.put_line(v_emp.ename || 加薪前 || v_emp.sal || 等级 || v_emp.grade || 加薪后 || v_emp.sal * (1((6 - v_emp.grade)*0.01)));end loop;commit;end;--方法二declarecursor c_emp is(select ename, sal, gradefrom emp2 ejoin salgrade s on e.sal between s.losal and s.hisal) order by ename;beginfor v_emp in c_emp loopcase v_emp.gradewhen 1 thenupdate emp2 set sal sal * (10.05) where emp2.ename v_emp.ename;when 2 thenupdate emp2 set sal sal * (10.04) where emp2.ename v_emp.ename;when 3 thenupdate emp2 set sal sal * (10.03) where emp2.ename v_emp.ename;when 4 thenupdate emp2 set sal sal * (10.02) where emp2.ename v_emp.ename;when 5 thenupdate emp2 set sal sal * (10.01) where emp2.ename v_emp.ename;else null;end case;/*dbms_output.put_line(v_emp.ename || 加薪前 || v_emp.sal || 等级 || v_emp.grade || 加薪后 || v_emp.sal * (1((6 - v_emp.grade)*0.01)));*/end loop;commit;end;