Oracle学习(十一):PL/SQL(三)
的薪水是'||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