PL/SQL编程基础(1)

下面分享一些Oracle的PL/SQL编程方面的习题,以下为个人写的答案。多指教!

1、简单PL/SQL块程序编写与运行,要求:接收某一姓名信息XXX,并输出显示“Hello XXX,今天是:当前日期

或者:

2、练习PL/SQL中各种类型变量的定义和使用

参见教材p140实验1,以scott模式下的表为例以用户自定义的表为例,举例练习PL/SQL中各种类型变量的定义和使用(包括标量变量、%type类型变量、自定义记录变量%rowtype变量)。将所有举例的PL/SQL语句记录下来。

(1)使用标量变量。

 

(2)使用%type类型的变量。

(3)自定义记录变量。

 

 

(4)使用%rowtype变量。

   

3、练习使用基本流程控制(循环)语句编写PL/SQL代码完成指定的数据处理功能

(1)利用LOOp循环方式计算1到100之间的偶数项之和(运行结果:2550)。

declare

       i number:=1;

       v_sum number:=0;

begin

       Loop

              exitwhen i>100;

              i:=i+1;

              ifmod(i,2)=0 then

                     v_sum:=v_sum+i;

              endif;

       end loop;

end;

/

 

 

(2)利用WHILE循环打印出50以内所有能被3整除的整数,以及该整数的个数(运行结果:16)。

 

(2)利用FOR循环计算并输出S=1!+2!+…+10! (运行结果:4037913)。

declare

     var_snumber:=1;

     var_sumnumber:=0;

Begin

     For a in 1..100loop

            For b in 1..a loop

                   var_s:=var_s*b;

            end loop;

            var_sum:=var_sum+var_s;

     end loop;

end;

/

 

4、练习使用基本流程控制语句编写PL/SQL代码完成指定的数据处理功能。

(1)题目要求:使用临时变量(&e_no)要求用户输入雇员号,利用IF语句判断该雇员的岗位是否为’CLERK’,如果是则将该雇员的工资提高1%。

答:declare

              v_e_no varchar2(80):=&e_no;

       begin

              ifv_e_no=’ CLERK’then

                     update emp

                     set sal = sal*1.01

                     where job =’CLERK’;

              endif;

       end;

       /

 

(2)题目要求:使用临时变量(&d_no)要求用户输入部门号,根据输入的部门号,利用使用选择器的case判断:

若是10号部门,则将该部门雇员的补助(对应EMP表中的字段COMM)改为100;若是20号部门,则将该部门雇员的补助改为80;若是30号部门,则将该部门雇员的补助改为50,否则输出“不存在该部门!”

答:declare

              v_d_no varchar2(20):=&d_no;

       begin

              casev_d_no

                     when 10 then  

                            updateemp

                            setcomm=100

                            wheredeptno=’10’;

 when20 then

                            updateemp

                            setcomm=80

                            wheredeptno=’20’;

when 30 then  

                            updateemp

                            setcomm=50

                            wheredeptno=’30’;

                     else

                            dbms_output.put_line(‘不存在该部门!’);

              endcase;

       end;

       /

 

(3)题目要求:使用临时变量(&e_no)要求用户输入雇员号,根据输入的雇员号,利用不使用选择器的case判断:

若雇员工资小于1000,则将该雇员的补助(对应EMP表中的字段COMM)改为100;若雇员工资在1000到2000,则将该雇员的补助改为80;若雇员工资大于2000,则将该雇员的补助改为50

 

答:declare

              v_e_no number:=&e_no;

       begin

              case

                     when v_e_no<1000 then

                            updateemp

                            setcomm=100

                            wheredeptno<1000;

                     when v_e_no<2000 and v_e_no>1000then

                            updateemp

                            setcomm=80

                            wheredeptno<2000 and dept>1000;

                     when v_e_no>2000 then

                            updateemp

                            setcomm=50

                            wheredeptno>2000;

              endcase;

       end;

      /

注意:

          1)在使用for循环时,中间是“..”而不是“...”; 

          2)与其他编程语言不同的是,在pl/sql块语句中,赋值语句为“:=”;

          3)声明变量时,要注意标识符命名的规范,否则可能会出现错误。标识符命名的规范,详见:点击打开链接

 

猜你喜欢

转载自blog.csdn.net/VinWqx/article/details/79846428