oracle结构控制语句Word格式文档下载.docx

上传人:b****6 文档编号:20184819 上传时间:2023-01-17 格式:DOCX 页数:14 大小:19.48KB
下载 相关 举报
oracle结构控制语句Word格式文档下载.docx_第1页
第1页 / 共14页
oracle结构控制语句Word格式文档下载.docx_第2页
第2页 / 共14页
oracle结构控制语句Word格式文档下载.docx_第3页
第3页 / 共14页
oracle结构控制语句Word格式文档下载.docx_第4页
第4页 / 共14页
oracle结构控制语句Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

oracle结构控制语句Word格式文档下载.docx

《oracle结构控制语句Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《oracle结构控制语句Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

oracle结构控制语句Word格式文档下载.docx

FROMemp

WHEREempno=v_empno;

IFv_job='

CLERK'

THEN

UPDATEempSETsal=1.1*sal

ENDIF;

EXCEPTION

WHENNO_DATA_FOUNDTHEN

DBMS_OUTPUT.PUT_LINE('

输入的雇员编号不存在'

);

COMMIT;

END;

2.IF-THEN-ELSE-ENDIF形式

这种形式的练习如下:

在emp表中,输入雇员编号,如果其工作是业务员(CLERK),工资提高10%,其他员工工资都增加20。

(plsql8.sql)

ELSE

UPDATEempSETsal=sal+20

3.IF-THEN-ELSIF-ELSE-ENDIF形式

根据雇员工资分级显示税金。

(plsql9.sql)

输入并运行以下程序:

v_salNUMBER(5);

v_taxNUMBER(5,2);

SELECTsalINTOv_sal

WHEREempno=7788;

IFv_sal>

=3000THEN

v_tax:

=v_sal*0.08;

--税率8%

ELSIFv_sal>

=1500THEN

v_tax:

=v_sal*0.06;

--税率6%

ELSE

=v_sal*0.04;

--税率4%

DBMS_OUTPUT.PUT_LINE('

应缴税金:

'

||V_tax);

说明:

该程序根据工资计算7788号雇员应缴税金,不同工资级别的税率不同。

选择结构

CASE语句适用于分情况的多分支处理,可有以下三种用法。

1.基本CASE结构

语句的语法如下:

CASE选择变量名

WHEN表达式1THEN

语句序列1

WHEN表达式2THEN

语句序列2

WHEN表达式nTHEN

语句序列n

语句序列n+1

ENDCASE;

在整个结构中,选择变量的值同表达式的值进行顺序匹配,如果相等,则执行相应的语句序列,如果不等,则执行ELSE部分的语句序列。

以下是一个使用CASE选择结构的练习。

使用CASE结构实现职务转换。

(plsql10.sql)

输入并执行程序:

v_jobVARCHAR2(10);

SELECTjobINTOv_job

FROMemp

WHEREempno=7788;

CASEv_job

WHEN'

PRESIDENT'

雇员职务:

总裁'

MANAGER'

经理'

SALESMAN'

推销员'

ANALYST'

系统分析员'

业务员'

ELSE

未知'

ENDCASE;

执行结果:

雇员职务:

系统分析员

PL/SQL过程已成功完成。

 

以上实例检索雇员7788的职务,通过CASE结构转换成中文输出。

练习:

将雇员号修改成输入雇员号,重新执行。

2.表达式结构CASE语句

在Oracle中,CASE结构还能以赋值表达式的形式出现,它根据选择变量的值求得不同的结果。

它的基本结构如下:

变量:

=CASE选择变量名

WHEN表达式1THEN值1

WHEN表达式2THEN值2

WHEN表达式nTHEN值n

ELSE值n+1

END;

使用CASE的表达式结构。

(plsql11.sql)

SETSERVEROUTPUTON

DECLARE

v_gradeVARCHAR2(10);

v_resultVARCHAR2(10);

BEGIN

v_grade:

='

B'

;

v_result:

=CASEv_grade

WHEN'

A'

THEN'

优'

良'

C'

中'

D'

差'

ELSE'

DBMS_OUTPUT.PUT_LINE('

评价等级:

||v_result);

执行结果为:

评价等级:

该CASE表达式通过判断变量v_grade的值,对变量v_result赋予不同的值。

3.搜索CASE结构

Oracle还提供了一种搜索CASE结构,它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。

CASE

WHEN条件表达式1THEN

WHEN条件表达式2THEN

语句序列2

WHEN条件表达式nTHEN

语句序列n

语句序列n+1

使用CASE的搜索结构,输出工资等级(plsql12.sql)。

SELECTsalINTOv_salFROMemp

CASE

WHENv_sal>

3000THEN

工资等级:

一级'

2000THEN

二级'

1400THEN

三级'

1200THEN

四级'

五级'

ENDCASE;

工资等级:

二级

此结构类似于IF-THEN-ELSIF-ELSE-ENDIF结构。

本训练判断7788雇员的工资等级。

循环结构

循环结构是最重要的程序控制结构,用来控制反复执行一段程序。

比如我们要进行累加,则可以通过适当的循环程序实现。

PL/SQL循环结构可划分为以下3种:

*基本LOOP循环。

*FORLOOP循环。

*WHILELOOP循环。

1.基本LOOP循环

基本循环的结构如下:

LOOP--循环起始标识

语句1;

语句2;

EXIT[WHEN条件];

ENDLOOP;

--循环结束标识

该循环的作用是反复执行LOOP与ENDLOOP之间的语句。

EXIT用于在循环过程中退出循环,WHEN用于定义EXIT的退出条件。

如果没有WHEN条件,遇到EXIT语句则无条件退出循环。

求12+32+52+...+152的值。

(plsql13.sql)

v_totalNUMBER(5):

=0;

v_countNUMBER(5):

=1;

LOOP

v_total:

=v_total+v_count**2;

EXITWHENv_count=15;

--条件退出

v_count:

=v_count+2;

ENDLOOP;

DBMS_OUTPUT.PUT_LINE(v_total);

输出结果为:

680

基本循环一定要使用EXIT退出,否则就会成为死循环。

练习:

求1*2*3*4*...*10的值。

2.FORLOOP循环

FOR循环是固定次数循环,格式如下:

FOR控制变量in[REVERSE]下限..上限

LOOP

循环控制变量是隐含定义的,不需要声明。

下限和上限用于指明循环次数。

正常情况下循环控制变量的取值由下限到上限递增,REVERSE关键字表示循环控制变量的取值由上限到下限递减。

以下是FOR循环结构的练习。

使用FOR循环,分别计算1~10阶乘,并将结果存入total表(plsql14.sql)

步骤1:

CREATETABLEtotal(nint,resultint);

步骤2:

v_iINT:

v_fINT:

FORv_iIN1..10LOOP

v_f:

=v_f*v_i;

INSERTINTOtotalVALUES(v_i,v_f);

ENDLOOP;

步骤3:

select*fromtotal;

3.WHILELOOP循环

WHILE循环是有条件循环,其格式如下:

WHILE条件LOOP

语句1;

语句2;

ENDLOOP;

当条件满足时,执行循环体;

当条件不满足时,则结束循环。

如果第一次判断条件为假,则不执行循环体。

以下是WHILE循环结构的练习。

使用WHILE循环向emp表连续插入5个记录。

(plsql15.sql)

步骤1:

执行下面的程序:

v_countNUMBER

(2):

=1;

WHILEv_count<

6LOOP

INSERTINTOemp(empno,ename)

VALUES(5000+v_count,'

临时'

v_count:

=v_count+1;

输出结果为:

PL/SQL过程已成功完成。

显示插入的记录:

SELECTempno,enameFROMempWHEREename='

EMPNOENAME

----------------------------

5001临时

5002临时

5003临时

5004临时

5005临时

已选择5行。

步骤3:

删除插入的记录:

DELETEFROMempWHEREename='

COMMIT;

已删除5行。

提交完成。

该练习使用WHILE循环向emp表插入5个新记录(雇员编号根据循环变量生成),并通过查询语句显示新插入的记录,然后删除。

4.多重循环

循环可以嵌套,以下是一个二重循环的练习。

使用二重循环求1!

+2!

+...+10!

的值。

第1种算法:

v_totalNUMBER(8):

v_niNUMBER(8):

JNUMBER(5);

FORIIN1..10

LOOP

J:

v_ni:

WHILEJ<

=I

=v_ni*J;

=J+1;

--内循环求n!

v_total:

=v_total+v_ni;

--外循环求总和

DBMS_OUTPUT.PUT_LINE(v_total);

4037913

第2种算法:

v_totalNUMBER(8):

v_niNUMBER(8):

FORIIN1..10

=v_ni*I;

--求n!

v_total:

=v_total+v_ni;

--循环求总和

409114

第1种算法的程序内循环使用WHILE循环求阶层,外循环使用FOR循环求总和。

第2种算法是简化的算法,根据是:

n!

=n*(n?

1)!

插入雇员,如果雇员已经存在,则输出提示信息。

SETSERVEROUTPUTON

v_empnoNUMBER(5):

=7788;

v_numVARCHAR2(10);

iNUMBER(3):

BEGIN

SELECTcount(*)INTOv_numFROMSCOTT.empWHEREempno=v_empno;

IFv_num=1THEN

雇员'

||v_empno||'

已经存在!

ELSE

INSERTINTOemp(empno,ename)VALUES(v_empno,'

TOM'

COMMIT;

成功插入新雇员!

说明:

在本程序中,使用了一个技巧来判断一个雇员是否存在。

如果一个雇员不存在,那么使用SELECT...INTO来获取雇员信息就会失败,因为SELECT...INTO形式要求查询必须返回一行。

但如果使用COUNT统计查询,返回满足条件的雇员人数,则该查询总是返回一行,所以任何情况都不会失败。

COUNT返回的统计人数为0说明雇员不存在,返回的统计人数为1说明雇员存在,返回的统计人数大于1说明有多个满足条件的雇员存在。

本例在雇员不存在时进行插入操作,如果雇员已经存在则不进行插入。

过关练习:

第一关:

编写一个PL/SQL块,循环向dept表中插入10个部门的数据

第二关:

编写一个PL/SQL块,将emp表中的每个员工分别归到不同的部门中,第一个员工归到10部门,第二个员工归到20部门,第三个员工归到30部门……

第三关:

使用if…elsif…else…endif语句,接受用户输入的员工号,按规则给其增加工资。

10部门增加10%,20部门增加20%,30部门增加30%,40部门增加40%,但不能超过5000

1\使用Map接口的实现类完成员工工资(姓名-?

工资)的摸拟:

1)、添加几条信息

2)、列出所有的员工姓名

3)、列出所有员工姓名及其工资

4)、删除名叫“Tom”的员工信息

5)、输出Jack的工资,并将其工资改为1500元

6)、将所有工资低于1000元的员工的工资上涨20%

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1