一、 实践目的

《数据库开发技术》课程之实验四

控制结构和嵌入式 SQL

1. 掌握 PL/SQL 程序设计的基本知识。

2. 掌握 PL/SQL 中控制结构的使用。具体包括:

选择结构(IF 语句和 CASE 语句);

循环结构(三种循环语句):

3. 掌握 PL/SQL 中 SELECT 语句和 DML 语句的正确使用方法。

二、 实践内容和要求

1.    通过 CASE 语句判断 7788 雇员的工资等级后输出,工资等级划分条件是:3000(含)以上为高,1500(含)

至 3000 为中,低于 1500 为低。

SET SERVEROUTPUT ON

DECLARE

v_sal      NUMBER(5);

BEGIN

SELECT sal INTO v_sal FROM emp WHERE empno=7788;

CASE

WHEN v_sal>=3000 THEN DBMS_OUTPUT.PUT_LINE(‘工资等级:高’);

WHEN v_sal>=1500 THEN DBMS_OUTPUT.PUT_LINE(‘工资等级:中’);

ELSE DBMS_OUTPUT.PUT_LINE(‘工资等级:低’);

END CASE;

END;

执行结果为:

工资等级:高

PL/SQL 过程已成功完成。

2.    用 PL/SQL 的 FOR 循环输出以下实心三角形:

1              *

2            ***

3          *****

4        *******

5      *********

Set serveroutput on

BEGIN

FOR I IN 1..5 LOOP                                    –采用 FOR 循环结构

DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(‘ ‘,8-I,’ ‘)||rpad(‘*’,2*I-1,’*’));

END LOOP;

END;

或者

DECLARE

String varchar2(20);

BEGIN

FOR I IN 1..5 LOOP                                    –采用 FOR 循环结构

String:=(i|| rpad(‘ ‘,5)||substr(‘

‘,1,(5-i))||substr(‘*********’,1,(i*2-1)));

END;

DBMS_OUTPUT.PUT_LINE(string);

END LOOP;

3.    先创建 d_asc 表。再编写一个匿名 PL/SQL 块,实现往此表插入 ASCII 码值从 32 至 126 的码号和相应

码值的字符。(提示:用 CHR()函数,   要求分别用两种循环方法实现)。

create table d_asc(n number, a char);

begin

for i in 32..126 loop                                                                    –FOR loop      有计数的循环

insert into d_asc values(i, chr(i));                                      –PL/SQL 中嵌入了 DML 语句

end loop;

commit;

end;

/

/* 检查 PL/SQL 程序块执行结果*/

Select * from d_asc;

.OR.

declare

i number(4):=32;

begin

while i<=126 loop                                                                    –WHILE loop      有条件的循环

insert into d_asc values(i, chr(i));

i:=i+1;

end loop;

commit;

end;

/

附加题:

用 PL/SQL 的循环语句编程,求:12+32+52+…+132+152 的值。

SET SERVEROUTPUT ON

DECLARE

v_sub NUMBER(5):=12;

v_sum    NUMBER(5):=0;

BEGIN

LOOP

v_sum:=v_sum+v_sub;

v_sub:=v_sub+20;

EXIT WHEN v_sub>152;

END LOOP;

DBMS_OUTPUT.PUT_LINE(v_sum);

END;

执行结果为:

656

PL/SQL 过程已成功完成。