在开始接触PL/SQL时,遇到的一些经典的例题,包括循环,函数,游标等几个方面。

码字不易,点个关注给个赞吧

1.       编写PL/SQL程序块,输出100到110之间的所有素数。

代码:

declare

i int:=2;

j int:=100;

--GOTO label;

begin

while j<110 loop

j:=j+1;

i:=1;

while i<=j/2 loop

i:=i+1;

if mod(j,i)=0

then exit;

end if;

end loop;

if i>j/2

thendbms_output.put_line(j||'是素数');

end if;

end loop;

end;

2.       编写PL/SQL块,输入一个雇员编号,而后取得指定的雇员姓名、编号及所在部门名。

代码:

declare

type emp_dept_type is record(

var_ename emp.ename%type,

var_empno emp.empno%type,

var_dname dept.dname%type

);

emp_dept emp_dept_type;

begin

select ename,empno,dname intoemp_dept from emp,dept

where emp.deptno=dept.deptnoand emp.empno=&a;

dbms_output.put_line('ename'||emp_dept.var_ename||'empno'||emp_dept.var_empno||'dname'||emp_dept.var_dname);

end;

3.       编写一个PL/SQL块,将EMP表中名为SMITH的雇员的工资进行修改,若原工资大于$2000,则加$500,否则加$1000 。

代码:

declare

var_sal emp.sal%type;

begin

select sal into var_sal

from emp where empno=7566;

if var_sal>2000

then update emp set sal=sal+500where empno=7566;

elsif var_sal<2000

then update emp setsal=sal+1000 where empno=7566;

end if;

end;

4.       用户输入一个雇员编号,根据它所在的部门给上涨工资,规则:

n  10部门上涨10%,20上涨20%,30上涨30%;

n  但是要求最高不能超过5000,超过5000就停留在5000。

要求:利用用户自定义异常处理工资高于5000情况

代码:

declare

esal emp.sal%type;

eno emp.empno%type:=&a;

dept1 emp.deptno%type;

begin

select deptno into dept1 fromemp where empno=eno;

if dept1=10

then update emp setsal=sal*1.1 where deptno=10;

elsif dept1=20

then update emp setsal=sal*1.2 where deptno=20;

elsif dept1=30

then update emp setsal=sal*1.3 where deptno=30;

end if;

select deptno into dept1 fromemp where empno=eno;

select max(sal) into esalfrom emp where deptno=dept1;

loop

if esal>5000

then update emp set sal=5000where sal=esal and deptno=dept1;

end if;

select max(sal) into esalfrom emp where deptno=dept1;

exit when esal<=5000;

end loop;

end;

5.       从控制台输入一个员工编号,声明一个记录类型(RECORD类型)emp_type,然后使用该类型的变量来存储emp表中的一条记录信息(只包括姓名、职务、工资及入职日期),并输出这条记录信息。

代码:

declare

type emp_type is record(

var_ename emp.ename%type,

var_job emp.job%type,

var_sal emp.sal%type,

var_hiredateemp.hiredate%type

);

empin emp_type;

begin

select ename,job,sal,hiredateinto empin from emp where empno=&a;

dbms_output.put_line('ename  '||empin.var_ename||'job  '||empin.var_job||'sal   '||empin.var_sal||'hiredate   '||empin.var_hiredate);

end;

6.       编写一个函数,根据部门号,对员工工资进行修改并返回该部门修改后的最高工资。修改原则为:如果是10部门,每个员工增加10%的工资,如果是20号部门,每个员工增加5%的工资,如果是30部门,每个员工增加3%的工资,其他部门的雇员工资增加1%的工资。

函数创建代码:

create or replace functionmyfunction1(eno emp.empno%type)

return number

is

null_exception exception;

esal emp.sal%type;

--eno emp.empno%type:=&a;

dept1 emp.deptno%type;

begin

--update emp set sal=sal*1.5where empno=eno;

select deptno into dept1 fromemp where empno=eno;

if dept1=10

then update emp setsal=sal*1.1 where deptno=10;

elsif dept1=20

then update emp setsal=sal*1.05 where deptno=20;

elsif dept1=30

then update emp setsal=sal*1.03 where deptno=30;

else update emp setsal=sal*1.01 where deptno=40;

end if;

select max(sal) into esalfrom emp where deptno=dept1;

dbms_output.put_line('the maxsal is:'||esal||'提升工资已完成');

return 1;

exception

when no_data_found then

dbms_output.put_line('查无此值');

end;

declare

a number;

begin

a:=myfunction1(7566);

end;

调用该函数

declare

a number;

begin

a:=myfunction1(7566);

end;

7.       声明一个游标(emp_info)用来读取部门号是20职工姓名、编号、所在部门名及职务。

代码:

declare

cursor empinfo(var_deptno innumber:=10)

is selectename,empno,dname,job from emp,dept where emp.deptno=dept.deptno

and emp.deptno=var_deptno;

type record_emp_dept isrecord(

var_ename emp.ename%type,

var_empno emp.empno%type,

var_dname dept.dname%type,

var_job emp.job%type);

emp_row record_emp_dept;

begin

open empinfo(10);

fetch empinfo into emp_row;

while empinfo%found loop

dbms_output.put_line(emp_row.var_ename||'的编号是'||emp_row.var_empno||'所在部门名是'||emp_row.var_dname||'职务是'||emp_row.var_job);

fetch empinfo into emp_row;

end loop;

close empinfo;

end;

 

 

8.      利用游标逐行输出员工姓名及工资级别。

代码:

declare

cursor empgrade

is select ename ,grade

from emp,salgrade

where emp.sal between losaland hisal;

type record_emp is record(

var_ename emp.ename%type,

var_gradesalgrade.grade%type);

emp_row record_emp;

begin

open empgrade;

fetch empgrade into emp_row;

while empgrade%found loop

dbms_output.put_line(emp_row.var_ename||'的工资等级是'||emp_row.var_grade);

fetch empgrade into emp_row;

end loop;

close empgrade;

end;

9.       使用函数统计SCOTT.EMP表每个部门的信息,包括部门名,员工总数及平均工资。

函数创建代码:

create or replace function myfunction

return number
is 
i int:=10;
var_dname dept.dname%type;
num number;
avg_sal emp.sal%type;
begin
for i in (select distinct deptno from emp) loop
select dname into var_dname from dept where deptno=i.deptno;
select count(empno) into num from emp where deptno=i.deptno;
select avg(sal) into avg_sal from emp where deptno=i.deptno;
dbms_output.put_line('部门名为'||var_dname||'的员工人数为'||num||'平均工资为'||avg_sal);
end loop;
return null;
end;
set serveroutput on
declare 
a number;
begin
a:=myfunction;
end;

 

调用该函数

set serveroutputon

declare

a number;

begin

a:=myfunction;

end;

PL/SQL常见例题相关推荐

  1. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  2. PL/SQL -- 动态SQL调用包中函数或过程

    动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...

  3. 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)

    Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...

  4. PL/SQL -- 动态SQL

    --==================== -- PL/SQL --> 动态SQL --==================== 使用动态SQL是在编写PL/SQL过程时经常使用的方法之一.很 ...

  5. PL/SQL异常处理(原创)

    Exception概述 Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理.为了提高程序的健壮性,可以在PL/SQL块中引入异常处理部分,进行捕捉异常, ...

  6. pl/sql远程连接oracle服务器问题(各种情况) .,plsql远程连接oracle服务器问题(各种情况).docx...

    plsql远程连接oracle服务器问题(各种情况).docx PLSQL远程连接oracle服务器问题(各种情况)1.病毒软件的防火墙可以关闭试试在连接.2.环境变量path里面没有加上%ORACL ...

  7. 第七章 控制PL/SQL错误

    一.错误控制一览 在PL/SQL中,警告或错误被称为异常.异常可以是内部(运行时系统)定义的或是用户定义的.内部定义的案例包括除零操作和内存溢出等.一些常见的内部异常都有一个预定义的名字,如ZERO_ ...

  8. Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

    1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...

  9. Oracle入门(十四B)之PL/SQL异常处理

    定义:程序执行过程的警告或错误成为例外(Exception) 一.常见预定义错误 二.非预定义错误及用户定义错误 (1)非预定义oracle错误 其他标准的oracle错误,可以自定义异常名,将其与指 ...

最新文章

  1. 图文解说OpenCV开发一 - 环境配置和入门程序详解
  2. nebula注释符号
  3. REVERSE-PRACTICE-BUUCTF-32
  4. 阿里-优酷视频增强和超分辨率挑战赛冠军方案:VESR-Net
  5. GNOME 3.32.1 维护版本更新发布
  6. 【oracle】oracle常用命令汇总
  7. html执行严格语法标准,JS语法(ES6)
  8. jQuery Api 学习(一、jQuery 概念 和 jQuery 文档)
  9. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(六)——放大器的频率特性
  10. 京东移动端URL自动跳转PC端URL插件
  11. 产品心理学:福格行为模型详解与应用
  12. 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
  13. [ 电子商务 ] 解读 Ad Network、Ad Exchange、DSP、SSP、RTB 和DMP 是什么?
  14. 老毛桃装ubuntu
  15. 仿CNode.js论坛学习
  16. 《管理学》期末第一次复习
  17. 《九》微信小程序中的自定义组件
  18. 怎么入驻印象淘宝短视频 申请通过印象淘宝条件要求
  19. SocketTools库版,资源重定向的处理
  20. 高德地图货车路径规划JS API以及WEB API在VUE中使用方法

热门文章

  1. 数学中鲜为人知的定理!
  2. Pandas之:Pandas高级教程以铁达尼号真实数据为例
  3. 全网最完整推荐系统,包含音乐推荐、博客推荐、新闻推荐,不管是学习、毕设、甚至是工作中使用,这一套就够了!
  4. PSM倾向得分匹配法【python实操篇】
  5. 漂亮UI的全能音乐播放器
  6. 爱了爱了!GitHub7200星,一个可以听全网无损音乐的神器
  7. 《东周列国志》第四十一回 连谷城子玉自杀 践土坛晋侯主盟
  8. 基于数字光栅投影的结构光三维测量技术
  9. 华为NCE网管配置EVPL业务(共享VCTrunk)之单站法
  10. 日本旅游必须要知道的5条规定,小心受罚