- --过程的语法 更改某个人的工资
- create or replace procedure sp_pro3(spName varchar2,newSal number) is
- begin
- update emp set sal=newSal where ename=spName;
- end;
- --包 生成一个包的语法
- create or replace package abc is
- end;
- --输入员工号得到工资等信息
- --税率为0.03
- declare
- --常量用c开头,变量让v开头
- c_tax_rate number(7,2):=0.03;
- v_ename varchar(10);
- v_sal number(7,2);
- v_tax_sal number(7,2);
- begin
- select ename,sal into v_ename,v_sal from emp where empno=&no;
- --计算所得税,赋值符号一定不能错
- v_tax_sal:=v_sal*c_tax_rate;
- --输出信息
- dbms_output.put_line('此员工的信息如下:'||v_ename||' 工资:'||v_sal||' 税:'||v_tax_sal);
- end;
- --让我们对上述的代码改写下
- declare
- c_tax_rate number(7,2):=0.03;
- v_ename emp.ename%type;
- v_sal emp.sal%type;
- v_tax_sal emp.sal%type;
- begin
- select ename,sal into v_ename,v_sal from emp where empno=&no;
- v_tax_sal:=v_sal*c_tax_rate;
- dbms_output.put_line('此员工的信息如下:'||v_ename||' 工资:'||v_sal||' 税:'||v_tax_sal);
- end;
- --使用记录变量的实例
- declare
- --定义一个pl/sql记录类型
- type emp_record_type is record(name emp.ename%type,sal emp.sal%type);
- --给记录一个别名
- sp_record emp_record_type;
- begin
- select ename,sal into sp_record from emp where empno=&no;
- --获取记录里的信息的方法
- dbms_output.put_line('此员工的信息如下:'||sp_record.name||' 工资:'||sp_record.sal);
- end;
- --表类型使用的案例(接受一个值)
- declare
- --定义一个table类型的变量,存放的类型是emp.ename%type
- --使用的下标是整数型的
- type sp_table_type is table of emp.ename%type index by binary_integer;
- sp_table sp_table_type;
- begin
- --下标要对应才可以,可以自己定义,这样写只能取出一个记录
- select ename into sp_table(0) from emp where empno=7788;
- dbms_output.put_line('员工名'||sp_table(0));
- end;
- declare
- --定义游标类型 sp_cursor
- type sp_emp_cursor is ref cursor;
- --定义游标变量
- test_cursor sp_emp_cursor;
- --定义变量接受姓名和工资
- v_ename emp.ename%type;
- v_sal emp.sal%type;
- begin
- --把一个游标和select结合
- open test_cursor for select ename,sal from emp where deptno=&no;
- --循环取出数据,循环结构使用loop结构
- loop
- --fetch是取出游标的意思
- fetch test_cursor into v_ename,v_sal;
- --判断退出的条件,没有就是死循环了哦
- exit when test_cursor%notfound;
- --输出
- dbms_output.put_line('姓名:'||v_ename||' 工资:'||v_sal);
- end loop ;
- end ;
结果
- 姓名:ALLEN 工资:1600
- 姓名:WARD 工资:1250
- 姓名:MARTIN 工资:1250
- 姓名:BLAKE 工资:2850
- 姓名:TURNER 工资:1500
- 姓名:JAMES 工资:950
- PL/SQL procedure successfully completed
常用的就是标量 记录 和游标了。 只要能取到值,其他的业务逻辑就可以使用变量来实现了。