oracle高级编程2
--存储过程 --函数 --完成普通的SQL编程。 PLSQL 完整语法结构: declare --定义变量、常量等(数据类型和长度) begin --plsql的内容 exception 异常类型 --异常处理 end; --数据类型。 */ -------计算员工的缴税--------- declare t_name scott.emp.ename%type; t_sal number(10,2); t_tax_rate constant number(3,2) := 0.2; begin select ename,sal+nvl(comm,0) into t_name,t_sal from scott.emp where empno=&请输入编号; dbms_output.put_line('姓名:'||t_name); dbms_output.put_line('薪水:'||t_sal); dbms_output.put_line('缴税:'||(t_sal*t_tax_rate)); dbms_output.put_line('实发:'||(t_sal-(t_sal*t_tax_rate))); exception when no_data_found then dbms_output.put_line('您输入的编号有误!'); end; --控制结构 if 条件 then elsif 条件2 then else end if; declare tint number(2) := 9; begin if tint>10 then dbms_output.put_line('大于10'); elsif tint=10 then dbms_output.put_line('等于10'); else dbms_output.put_line('小于10'); end if; end; --case语句 --精确匹配 declare tint number(2) := 9; begin case tint when 9 then dbms_output.put_line('==9'); when 8 then dbms_output.put_line('==8'); else dbms_output.put_line('others'); end case; end; --范围匹配 declare tint number(2) := -5; begin case when tint=9 or tint>9 then dbms_output.put_line('>=9'); when tint<9 and tint>0 then dbms_output.put_line('0-8'); else dbms_output.put_line('others'); end case; end; --循环结构 --1. loop 。。。。 end loop;循环。 declare i int := 1; begin loop dbms_output.put_line('i='||i); i := i + 1; exit when i>10; end loop; end; --2. while 循环(loop增强——次数未知) declare i int := 1; begin while i<10 loop dbms_output.put_line('while >>>> i='||i); i := i + 1; end loop; end; --3. for 循环(loop简化版——次数固定) create or replace procedure proc_show99 as begin for i in 1..9 loop for j in 1..i loop dbms_output.put(j||'*'||i||'='||j*i||' '); end loop; dbms_output.put_line(''); end loop; end; --自定义异常(如果出现不满足要求的数据,使用抛出异常的方式,终止程序的执行) declare d_name scott.dept.dname%type; begin select dname into d_name from scott.dept; dbms_output.put_line(d_name); exception when others then dbms_output.put_line('系统故障,!!!'); end; --修改员工的工资,如果工资降低,抛出异常。 declare t_sal number(10,2); e_no number(10) :=&请输入编号; n_sal number(10) :=&请输入薪水; exceptionInfo exception; begin select sal into t_sal from scott.emp where empno=e_no; if n_sal<t_sal then --dbms_output.put_line('员工工资不能降!!!'); raise exceptionInfo; end if; dbms_output.put_line('我能执行吗?'); exception when exceptionInfo then dbms_output.put_line('员工工资不能降!!!'); end; --游标 --1. 显示游标 (open。。。 close) --2. for循环游标(隐士游标) --显示游标 declare cursor cur_deptinfo is select * from scott.dept; deptLine scott.dept%rowtype; begin open cur_deptinfo;--打开 -- 提取数据 loop fetch cur_deptinfo into deptLine; exit when cur_deptinfo%notfound; dbms_output.put_line(deptLine.deptno||':'||deptLine.dname); end loop; close cur_deptinfo;--关闭 end; --for循环游标 declare cursor cur_deptinfo is select * from scott.dept; begin for deptLine in cur_deptinfo loop -- dbms_output.put_line(deptLine.deptno||':'||deptLine.dname); end loop; end;