11 PLSQL 基础(2)--块(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

X>=10,
y=2x-wk.baidu.com0
有三种情况的分支语句
y的值
If-then-elsif-then-else-end if
declare
x int:=10; y int;
begin
if x<0 then
y:=x*x+1;
elsif x<10 then
y:=3*x+1;
else
y:=2*x-10;
end if; dbms_output.put_line('当x='||x||'时'||'y='||y);
empno=&aa;
pl/sql块的实例(3)
实例3-包含定义部分,执行部分和例外处理部分 为了避免pl/sql程序的运行错误,提高pl/sql的健壮
性,应该对可能的错误进行处理,这个很有必要。
1.比如在实例2中,如果输入了不存在的雇员号,应
当做例外处理。
2.有时出现异常,希望用另外的逻辑处理,
exit when 条件;
End loop;
Exit when i=11; end loop; dbms_output.put_line(n);
end;
课堂练习:1+3+5+..+99
循环结构3 : While-loop-end
3. While-loop-end 语法:
declare
n number:=1; i int:=2;
Begin
While x<=10 loop
n:=n*i; i:=i+1;
While 条件
Loop
循环语句
End loop;
end loop; dbms_output.put_line(n);
end;
循环结构4 :For count in count_1..count_n
declare
n number:=1; i int;--循环控制变量
会产生一个预定义叫zero_divide的异常
实例:被0除的预处理
declare
n number(2):=78; m number(2):=3; result number(2);
begin
result:=n/m; dbms_output.put_line(result);
exception
when zero_divide then
例外处理部分是从exception开始的,该部分是可
选的。
pl/sql块的实例(1)
实例1-只包括执行部分的pl/sql块
set serveroutput on
begin
--打开输出选项
dbms_output.put_line('hello');
end;
说明:dbms_output是oracle所提供的包(类似java的开
Oracle
PL/SQL语言介绍(2)
Pl/sql 的学习目标: 1.理解oracle的pl/sql概念
2.掌握pl/sql编程技术(包括编写过程、
函数、触发器...)
本ppt的内容
过程 函数 块(block) 触发器

PL/SQL 概述
编写规范 1.注释 :
单行注释 --
多行注释 /*...*/
end case; dbms_output.put_line(y);
end;
课堂实例:
查询某个学生某门课程的成绩,输出等级 测试 js07101学生的asp.net开发课程的成绩
3.异常处理
异常 程序出错的预防处理
Pl/sql提供了exception(异常)来处理
3.1 预定义异常 预定义异常时由系统产生的,比如被0除,pl/sql
when 值 then 结果表达式2
:
[else结果表达式n ]
End;
实例:将分数变成等级
小于60;不及格 大于等于60小于80; 及格
大于等于80小于等于100; 优秀
其他,非法分数
declare
x number:=108; y varchar(6);
begin
case trunc(x/10)
课堂练习:求各部门的人数
求各部门的人数,要求: 如果人数都不为0,则输出人数
如果某个部门人数为0,则输出“该部门没有员工

declare v_num number(2); begin select count(*) into v_num from emp where deptno=&no; if v_num=0 then dbms_output.put_line('该部门没有员工'); else dbms_output.put_line('该部门员工人数为:'||v_num); end if; end;
dbms_output.put_line('除数不能为0');
end;
其他预定义异常
No_data_found
Select 没有找到符合条件的行
Too_many_rows
检测到多行,用于游标
Dup_val_on_index
索引中已经有某列的键值,还要插入,则出错。比如 ,以学号为主键,插入重复学号,则报错
如何完成1的要求。
oracle事先预定义了一些例外,no_data_found就是找 不到数据的例外。
declare
begin
--定义变量
--执行部分
exception
when no_data_found then
dbms_output.put_line('朋友,你的编号输入有误!');
end;
2.标志符号的命名规范
1).当定义变量时,建议用v_作为前缀v_sal
2).当定义常量时,建议用c_作为前缀c_rate 3).当定义游标时,建议用_cursor作为后缀emp_cursor 4).当定义例外时,建议用e_作为前缀e_error
pl/sql块介绍
块(block)是pl/sql的基本程序单元,编写pl/sql程序实 际上就是编写pl/sql块,要完成相对简单的应用功能
While ---loop---end
2.控制结构语句 if…then…else…end if
2.1 if语句 IF 条件 THEN If语句练习: 输入雇员号,查询雇 员的工资,如果工 资小于2000,则显 示“工资急需提高
语句1;
ELSE
语句2;
END IF;
!”,否则显示“
工资正常”
例1:查询工资高于2000的人数,并输出 Declare V_num number(3); Begin Select count(*) into v_num from emp where sal>2000; If v_num<>0 then Dbms_output.put_line(‘人数为:’||to_char(v_num)); End if; End;
end loop; dbms_output.put_line(n);
end;
循环结构2 : loop-exit-when-end
2.loop-exit-when-end 语法:
实例 10! declare
n number:=1; i int:=2;
Loop
循环语句
begin
loop
n:=n*i; i:=i+1;
4. For count in count_1..count_n
loop
循环语句
begin
for i in 2..10
end loop;
loop
n:=n*i;
end loop;
dbms_output.put_line(n);
end;
2.3 选择 Case 表达式
when 值 then 结果表达式1
,可能只需要编写一个pl /sql块,但是如果想要实现
复杂的功能,可能需要在一个pl/sql块中嵌套其它的
pl/sql块。
PL/SQL程序块的每一条语句必须由分号结束,每个 语句块由begin或declare 开始,以end结束
pl/sql块由三个部分构成:定义部分,执行部分,例 外处理部分。
declare -----/*定义部分——定义常量、变量、游标
、例外、复杂数据类型*/
begin ------/*执行部分——要执行的pl/sql语句和sql
语句*/ exception -----/*例外处理部分——处理运行的各种 错误*/ end;
定义部分是从declare开始的,该部分是可选的; 执行部分是从begin开始的,该部分是必须的;
发包),该包包含一些过程,put_line就是
dbms_output包的 一个过程。
pl/sql块的实例(2)
实例2-包含定义部分和执行部分的pl/sql块 通过输入雇员号显示该雇员姓名。
Declare
V_name varchar2(10);
Begin
Select ename into v_name from emp where empno=&no;
Pl/sql 基本程序结构
条件结构 If……then……end if 选择和跳转语句 Case语句 Goto 语句
If……then…else…end if
If…then…elseif… then…else…end if
循环结构
Loop--exit---end
Loop---exit---when---end
Dbms_output.put_line(‘雇员名为:’|| v_name);
End;
pl/sql块的实例(2)
在上例的基础上通过输入雇员号显示该雇员的姓名 ,工资
如果要把薪水也显示出来,那么执行部分就应该这
么写:
select ename,sal into v_ename,v_sal from emp where
条件分支3: if…then…elseif…then…else…end if
2.1 if语句 IF 条件 THEN 语句1; ELSEif 条件 then 语句2; Else 语句3; END IF; 计算:x=-5, x=8,x=12 时, X<0 , y=x2+1
0<=x<10, y=3x+1
Value_error
插入的值超过范围,比如:230插入到“number(2)”的
变量中
Case_not_found
在case中发现不匹配when的语句
课堂练习
1.查找“scott” 的岗位并输出 如果不只一条记录,则报错
2.定义一个char(5)的变量,如果赋值的字符个数大
于5,则报错
循环结构1:Loop-exit-end
2.2 循环结构 1. Loop-exit-end 语法: Loop 循环语句 if 条件 then exit; end if; End loop;
实例 10! declare
n number:=1; i int:=2;
begin
loop
n:=n*i; i:=i+1; if i>10 then exit; end if;
end;
练习
5.编写一个程序块,可以输入一个雇员名,如果该雇员的 工资低于2000,就给该员工工资增加10%。(使用if 语句 ) 6.可以输入一个雇员名,如果该雇员的补助不是0就在原来 的基础上增加100;如果补助为0就把补助设为200; (使
用if 语句)
7.可以输入一个雇员编号,如果该雇员的职位是PRESIDENT 就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他的工资增加500,其它职位的雇员工资增加200。( 使用if 语句)
when 0 then y:='不及格'; when 1 then y:='不及格'; when 2 then y:='不及格'; when 3 then y:='不及格'; when 4 then y:='不及格'; when 5 then y:='不及格'; when 6 then y:='及格'; when 7 then y:='及格'; when 8 then y:='优秀'; when 9 then y:='优秀'; when 10 then y:='优秀'; else y:='非法';
3.2 自定义异常 语法:
Exception
When 条件1 then 语句1; When 条件2 then 语句2; : [when others then] 语句3;
End;
实例
declare e_overnumber exception;--定义异常处理变量 v_snum int; v_max_snum int:=500; begin select count(*) into v_snum from student ; if v_snum>v_max_snum then raise e_overnumber;--跳转到异常处理 end if; exception when e_overnumber then dbms_output.put_line('学生人数超过最大值'); end;
相关文档
最新文档