Oracle学习(十一):PL/SQL(三)

2014-11-24 09:09:07 · 作者: · 浏览: 5
的薪水是'||emp_rec.sal); 9 10 end; 11 / KING的薪水是5000 PL/SQL procedure successfully completed SQL> SQL> --if语句:判断用户输入的数字 SQL> set serveroutput on SQL> /* 2 1.提示信息 3 2. 接收键盘输入 4 num 是一个地址值 5 6 SQL优化: num绑定变量(尽量使用绑定变量) 7 select * from emp where deptno=10; --> 执行计划 8 select * from emp where deptno=20; --> 执行计划 9 --> 10 select * from emp where deptno=# 11 12 */ 13 accept num prompt '请输入一个数字'; SQL> declare 2 --变量保存输入的数字 3 pnum number := # 4 begin 5 --判断 6 if pnum = 0 then 7 dbms_output.put_line('您输入的是0'); 8 elsif pnum = 1 then 9 dbms_output.put_line('您输入的是1'); 10 elsif pnum = 2 then 11 dbms_output.put_line('您输入的是2'); 12 else 13 dbms_output.put_line('其他数字'); 14 end if; 15 end; 16 / 您输入的是2 PL/SQL procedure successfully completed SQL> SQL> --循环: 打印1~10 SQL> set serveroutput on SQL> declare 2 pnum number := 1; --给pnum赋值1,pnum类型为number 3 begin 4 loop 5 --退出:成立退出,不成立循环 6 exit when pnum > 10; 7 8 --隐式转换,number转varchar2 9 dbms_output.put_line(pnum); 10 11 pnum := pnum + 1; 12 13 end loop; 14 end; 15 / 1 2 3 4 5 6 7 8 9 10 PL/SQL procedure successfully completed SQL> SQL> -光标: 使用游标查询员工姓名和工资,并打印 SQL> /* 2 光标的3个属性: 3 %isopen 是否被打开:打开true,关闭false; 4 %rowcount 行数 5 %notfound 是否有值:没有值true,有值false; 6 */ SQL> set serveroutput on SQL> declare 2 --光标 3 cursor cemp is select ename,sal from emp; 4 pename emp.ename%type; --将用来接收的变量类型设置为和查询的类型相同 5 psal emp.sal%type; 6 begin 7 open cemp; --打开光标执行查询 8 loop 9 --从集合中取值 10 fetch cemp into pename,psal; 11 --光标中没有值时退出 12 exit when cemp%notfound; 13 14 dbms_output.put_line(pename||'的薪水是'||psal); 15 16 end loop; 17 close cemp; 18 end; 19 / SMITH的薪水是800 ALLEN的薪水是1600 WARD的薪水是1250 JONES的薪水是2975 MARTIN的薪水是1250 BLAKE的薪水是2850 CLARK的薪水是2450 SCOTT的薪水是3000 KING的薪水是5000 TURNER的薪水是1500 ADAMS的薪水是1100 JAMES的薪水是950 FORD的薪水是3000 MILLER的薪水是1300 PL/SQL procedure successfully completed SQL>
--光标练习:给员工涨工资 总裁1000 经理800 其他400 SQL> --先查询没涨之前的 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH CLERK 7902 1980/12/17 800.00 20 7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30 7566 JONES MANAGER 7839 1981/4/2 2975.00 20 7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30 7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30 7782 CLARK MANAGER 7839 1981/6/9 2450.00 10 7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20 7839 KING PRESIDENT 1981/11/17 5000.00 10 7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987/5/23 1100.00 20 7900 JAMES CLERK 7698 1981/12/3 950.00 30 7902 FORD ANALYST 7566 1981/12/3 3000.00 20 7934 MILLER CLERK 7782 1982/1/23 1300.00 10 14 rows selected SQL> --执行PLSQL语句 SQL> SQL> set serveroutput on SQL> declare 2 --光标代表员工 3 cursor cemp is select empno,job from emp; 4 pempno emp.empno%type; 5 pjob emp.job%type; 6 begin 7 open cemp; 8 loop 9 fetch cemp into pempno,pjob; 10 exit when cemp%notfound; 11 12 --判断 13 if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno; --总裁涨1000 14 elsif pjob = 'MANAGER' then update emp set sal=sal+800 where empno=pempno; --经理涨800 15 else update emp set sal=sal+400 where e