文章目录
- 1、简单PL/SQL块程序编写与运行,要求:接收某一姓名信息XXX,并输出显示“Hello XXX,今天是:当前日期”。
- 以scott模式下的表为例或以用户自定义的表为例,举例练习PL/SQL中各种类型变量的定义和使用(包括标量变量、%type类型变量、自定义记录变量、%rowtype变量)。将所有举例的PL/SQL语句记录下来。
- 3、练习使用基本流程控制(循环)语句编写PL/SQL代码完成指定的数据处理功能。
- (1)利用LOO循环方式计算1到100之间的偶数项之和(运行结果:2550)。
- (2)利用WHILE循环打印出50以内所有能被3整除的整数,以及该整数的个数(运行结果:16)。
- (3)利用FOR循环计算并输出S=1!+2!+…+10! (运行结果:4037913)
- (1)题目要求:使用临时变量(&e_no)要求用户输入雇员号,利用IF语句判断该雇员的岗位是否为’CLERK’,如果是则将该雇员的工资提高1%。
- (3)题目要求:使用临时变量(&e_no)要求用户输入雇员号,根据输入的雇员号,利用不使用选择器的case判断:
1、简单PL/SQL块程序编写与运行,要求:接收某一姓名信息XXX,并输出显示“Hello XXX,今天是:当前日期”。
set serveroutput on
accept name1 prompt '请输入名字';
declare
name varchar2(10);
begin
name:='&name';
dbms_output.put_line('Hello'||name||',今天是:'||sysdate);
end;
以scott模式下的表为例或以用户自定义的表为例,举例练习PL/SQL中各种类型变量的定义和使用(包括标量变量、%type类型变量、自定义记录变量、%rowtype变量)。将所有举例的PL/SQL语句记录下来。
(1)使用标量变量。
declare
v_name varchar2(10);
begin
select ename into v_name from emp where empno=7369;
dbms_output.put_line(v_name);
end;
(2)使用%type类型的变量。
declare
v_no emp.empno%type:=666;
v_ename emp.ename%type:='hhhh';
begin
dbms_output.put_line(v_no);
dbms_output.put_line(v_ename);
end;
(3)自定义记录变量。
declare
type emp2 is record(
v_no emp.empno%type,
v_ename emp.ename%type);
emp1 emp2;
begin
select emp.empno,emp.ename into emp1.v_no,emp1.v_ename from emp where empno=7369;
dbms_output.put_line(emp1.v_no||emp1.v_ename);
end;
(4)使用%rowtype变量。
declare
emp1 emp%rowtype;
begin
select * into emp1 from emp where empno=756;
dbms_output.put_line(emp1.empno||emp1.ename);
end;
3、练习使用基本流程控制(循环)语句编写PL/SQL代码完成指定的数据处理功能。
(1)利用LOO循环方式计算1到100之间的偶数项之和(运行结果:2550)。
declare
sum1 number:=0;
T number:=0;
begin
loop
T := T + 2;
sum1 := sum1 + T;
exit when T=100;
end loop;
dbms_output.put_line(sum1);
end;
(2)利用WHILE循环打印出50以内所有能被3整除的整数,以及该整数的个数(运行结果:16)。
declare
sum1 number:=0;
T number:=1;
temp number:=0;
begin
while T<=50 loop
select mod(T,3) into temp from dual;
if temp=0 then
dbms_output.put_line(T);
sum1 := sum1 + 1;
end if;
T := T + 1;
end loop;
dbms_output.put_line(sum1);
end;
(3)利用FOR循环计算并输出S=1!+2!+…+10! (运行结果:4037913)
declare
i number:=1;
j number:=1;
sum1 number:=0;
temp number:=1;
begin
for j in 1..10 loop
temp:= temp * j;
sum1:=sum1 + temp;
end loop;
dbms_output.put_line(sum1);
end;
(1)题目要求:使用临时变量(&e_no)要求用户输入雇员号,利用IF语句判断该雇员的岗位是否为’CLERK’,如果是则将该雇员的工资提高1%。
accept e_no prompt '请输入雇员号';
declare
v_no number;
v_job emp.job%type:='CLERK';
v_temp emp.job%type;
begin
v_no := &e_no;
select job into v_temp from emp where empno=v_no;
if v_temp=v_job then
update emp set sal=sal*1.01 where empno=v_no;
dbms_output.put_line('成功!');
end if;
end;
(2)题目要求:使用临时变量(&d_no)要求用户输入部门号,根据输入的部门号,利用使用选择器的case判断:
若是10号部门,则将该部门雇员的补助(对应EMP表中的字段COMM)改为100;若是20号部门,则将该部门雇员的补助改为80;若是30号部门,则将该部门雇员的补助改为50
accept e_no prompt '请输入部门号';
declare
v_no emp.deptno%type;
v_temp emp.comm%type;
begin
v_no := &e_no;
update emp set comm = case v_no when 10 then 100
when 20 then 80
when 30 then 50
else 0
end where DEPTNO=v_no;
end;
(3)题目要求:使用临时变量(&e_no)要求用户输入雇员号,根据输入的雇员号,利用不使用选择器的case判断:
若雇员工资小于1000,则将该雇员的补助(对应EMP表中的字段COMM)改为100;若雇员工资在1000到2000,则将该雇员的补助改为80;若雇员工资大于2000,则将该雇员的补助改为50
accept e_no prompt '请输入雇员号';
declare
v_no emp.empno%type;
v_temp emp.comm%type;
begin
v_no := &e_no;
select comm into v_temp from emp where empno=v_no;
update emp set comm = case when v_temp<1000 then 100
when 2000>=v_temp then 80
else 50
end where DEPTNO=v_no;
end;