6oracle实验六指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六PL/SQL基本语句
【实验目的】
(1)掌握PL/SQL基本语法
(2)练习PL/SQL数据定义及使用
(3)掌握PL/SQL程序结构
【实验原理】
(1)PL/SQL的程序结构
DECLARE --标记声明部分
…… --此处用来定义常量、变量、类型和游标等(可选)
BEGIN --标记程序主体部分开始
…… --此处用来编写各种PL/SQL语句、函数和存储过程
EXCEPTION --标记异常处理部分开始
…… --此处用来编写异常处理代码(可选)
END; --标记程序主体部分结束
(2)声明变量
<变量名> <数据类型> [(宽度) := <初始值>];
(3)数据控制语句
(a)选择语句
◆If判断
if condition then Statement end if
if condition then Statements_1 else Statements_2 end if
if condition1 then Statements_1
elsif condition2 then Statements_2
else Statements_3 end if
◆CASE语句
Case 变量
WHEN表达式1 then值1
WHEN表达式2 then值2
WHEN表达式3 then值3
WHEN表达式4 then值4
【ELSE值5】
END ;
(b)循环语句
◆loop…exit…end loop循环控制语句
◆loop..exit when..end loop循环控制
◆WHILE…..LOOP…END LOOP循环控制语句
◆FOR..IN..LOOP…END LOOP循环控制语句
(4)输出语句
(a)设置环境变量,打开输出缓冲区:SET SERVEROUTPUT ON
(b)输出语句:DBMS_OUTPUT.PUT_LINE(str)
【实验示例】
1.从scott方案下的emp表中查询编号为7788的员工的工资,如果工资小于500,将其乘以1.5;如果工资小于1500,将其乘以1.3;如果工资小于3000,将其乘以1.1;否则将工资乘以1.0。
Set serveroutput on;
declare
v_sal scott.emp.sal%type;
begin
select sal into v_sal from scott.emp where empno=7788;
if v_sal<500 then
update scott.emp set sal=sal*1.5 where empno=7788;
elsif v_sal<1500 then
update scott.emp set sal=sal*1.3 where empno=7788;
elsif v_sal<3000 then
update scott.emp set sal=sal*1.1 where empno=7788;
else
update scott.emp set sal=sal*1.0 where empno=7788;
end if;
commit;
end;
/
2.举例说明处理系统预定义的错误。当执行select语句时,如果没有找到empno=7788的记录,则发生no_data_found错误,如果找到多条empno=7788的记录,则发生too_many_rows错误。No_data_found和too_many_rows错误直接在exception的when 从句处理。
Declare
V_comm m%type;
Begin
Select comm into v_comm from scott.emp where empno=7788;
Exception
When no_data_found then
Dbms_output.put_line('no data!');
When too_many_rows then
Dbms_output.put_line( 'too_many_rows!');
When others then
Null;
End;
/
3.用case语句判断grade变量的值,当grade等于’A’时,输出excellent;当grade等于’B’时,输出very good;当grade等于’C’时,输出good;当grade等于’D’时,输出fair;当grade等于’F’时,输出poor;否则输出no such grade。Declare
grade char(20):='B';
begin
Case grade
When 'A' then dbms_output.put_line('excellent');
When 'B' then dbms_output.put_line('very good');
When 'C' then dbms_output.put_line('good');
When 'D' then dbms_output.put_line('fair');
When 'F' then dbms_output.put_line('poor');
Else dbms_output.put_line('no such grade');
End case;
End;
/
4.
Declare
number integer:=2;
begin
Case number
WHEN 1 then dbms_output.put_line('number的值:'||number);
WHEN 2 then dbms_output.put_line('number的值:'||number);
WHEN 3 then dbms_output.put_line('number的值:'||number);
WHEN 4 then dbms_output.put_line('number的值:'||number);
ELSE dbms_output.put_line('Invalid Option.');
END case;
end;
/
5.
(1) declare
number1 integer:=80;
number2 integer:=90;
i integer:=0;
begin
loop
number1:=number1+1;
if number1=number2 then
exit;
else
i:=i+1;
end if;
end loop;
dbms_output.put_line('共循环次数:'||to_char(i));
end;
/
(2) declare