PL-SQL经典试题

 

6.1 赋值语句:通过变量实现查询语句

 

declare

  v_emp_record employees%rowtype;

  v_employee_id employees.employee_id%type;

begin

  --使用赋值符号位变量进行赋值

  v_employee_id := 186;

 

  --通过 select ... into ... 语句为变量赋值

 select * into v_emp_record

 from employees

 where employee_id = v_employee_id;

 

 -- 打印变量的值

 dbms_output.put_line(v_emp_record.last_name || ', ' || v_emp_record.email || ', ' ||  

v_emp_record.salary || ', ' ||  v_emp_record.job_id  || ', ' || v_emp_record.hire_date);

end;

 

6.2  通过变量实现DELETE、INSERT、UPDATE等操作

 

declare

  v_emp_id employees.employee_id%type;

 

begin

  v_emp_id := 109;

  delete from employees

  where employee_id = v_emp_id;

  --commit;

end;

*******************************************************************************

流程控制

*******************************************************************************

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

条件判断

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

7. 使用 IF ... THEN ... ELSIF ... THEN ...ELSE ... END IF;

 

要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000';

若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'

(方法一)

declare

  v_salary employees.salary%type;

begin

  --通过 select ... into ... 语句为变量赋值

 select salary into v_salary

 from employees

 where employee_id = 150;

 

 dbms_output.put_line('salary: ' || v_salary);

 

 -- 打印变量的值

 if v_salary >= 10000 then

    dbms_output.put_line('salary >= 10000');

 elsif v_salary >= 5000 then

    dbms_output.put_line('5000 <= salary < 10000');

 else

    dbms_output.put_line('salary < 5000');

 end if;

(方法二)

declare

     v_emp_name employees.last_name%type;

     v_emp_sal employees.salary%type;

     v_emp_sal_level varchar2(20);

begin

     select last_name,salary into v_emp_name,v_emp_sal from employees where employee_id = 150;

     

     if(v_emp_sal >= 10000) then v_emp_sal_level := 'salary >= 10000';

     elsif(v_emp_sal >= 5000) then v_emp_sal_level := '5000<= salary < 10000';

     else v_emp_sal_level := 'salary < 5000';

     end if;

     

     dbms_output.put_line(v_emp_name||','||v_emp_sal||','||v_emp_sal);

end;

 

7+ 使用 CASE ... WHEN ... THEN ...ELSE ... END 完成上面的任务

 

declare

       v_sal employees.salary%type;

       v_msg varchar2(50);

begin     

       select salary into v_sal

       from employees

       where employee_id = 150;

       

       --case 不能向下面这样用

       /*

       case v_sal when salary >= 10000 then v_msg := '>=10000'

                  when salary >= 5000 then v_msg := '5000<= salary < 10000'

                  else v_msg := 'salary < 5000'

       end;

       */

 

       v_msg :=

             case trunc(v_sal / 5000)

                  when 0 then 'salary < 5000'

                  when 1 then '5000<= salary < 10000'

                  else 'salary >= 10000'

             end;

       

       dbms_output.put_line(v_sal ||','||v_msg);

end;

 

8. 使用 CASE ... WHEN ... THEN ... ELSE ... END;

要求: 查询出 122 号员工的 JOB_ID, 若其值为 'IT_PROG', 则打印 'GRADE: A';

'AC_MGT', 打印 'GRADE B',

'AC_ACCOUNT', 打印 'GRADE C';

否则打印 'GRADE D'

 

declare

       --声明变量

       v_grade char(1);

       v_job_id employees.job_id%type;

begin

       select job_id into v_job_id

       from employees

       where employee_id = 122;

       

       dbms_output.put_line('job_id: ' || v_job_id);

       

       --根据 v_job_id 的取值, 利用 case 字句为 v_grade 赋值

       v_grade :=  

               case v_job_id when 'IT_PROG' then 'A'

                             when 'AC_MGT' then 'B'

                             when 'AC_ACCOUNT' then 'C'

                             else 'D'

                end;

                

       dbms_output.put_line('GRADE: ' || v_grade);

end;

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

循环结构

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

9. 使用循环语句打印 1 - 100.(三种方式)

 

1).  LOOP ... EXIT WHEN ... END LOOP

declare

       --初始化条件

       v_i number(3) := 1;

begin

       loop

       --循环体

        dbms_output.put_line(v_i);

--循环条件

        exit when v_i = 100;

--迭代条件

        v_i := v_i + 1;

       end loop;

end;

 

2). WHILE ... LOOP ... END LOOP

declare

       --初始化条件

       v_i number(3) := 1;

begin

       --循环条件

       while v_i <= 100 loop

     --循环体

             dbms_output.put_line(v_i);

     --迭代条件

             v_i := v_i + 1;

       end loop;

end;

 

3).

begin

       for i in 1 .. 100 loop

             dbms_output.put_line(i);

       end loop;

end;

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。
 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值