PL/SQL常见例题
在开始接触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常见例题相关推荐
- oracle pl/sql 程序设计 历史笔记整理
20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...
- PL/SQL -- 动态SQL调用包中函数或过程
动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...
- 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)
Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...
- PL/SQL -- 动态SQL
--==================== -- PL/SQL --> 动态SQL --==================== 使用动态SQL是在编写PL/SQL过程时经常使用的方法之一.很 ...
- PL/SQL异常处理(原创)
Exception概述 Exception是一种PL/SQL标识符,当运行的PL/SQL块出现错误或警告,则会触发异常处理.为了提高程序的健壮性,可以在PL/SQL块中引入异常处理部分,进行捕捉异常, ...
- pl/sql远程连接oracle服务器问题(各种情况) .,plsql远程连接oracle服务器问题(各种情况).docx...
plsql远程连接oracle服务器问题(各种情况).docx PLSQL远程连接oracle服务器问题(各种情况)1.病毒软件的防火墙可以关闭试试在连接.2.环境变量path里面没有加上%ORACL ...
- 第七章 控制PL/SQL错误
一.错误控制一览 在PL/SQL中,警告或错误被称为异常.异常可以是内部(运行时系统)定义的或是用户定义的.内部定义的案例包括除零操作和内存溢出等.一些常见的内部异常都有一个预定义的名字,如ZERO_ ...
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...
- Oracle入门(十四B)之PL/SQL异常处理
定义:程序执行过程的警告或错误成为例外(Exception) 一.常见预定义错误 二.非预定义错误及用户定义错误 (1)非预定义oracle错误 其他标准的oracle错误,可以自定义异常名,将其与指 ...
最新文章
- 图文解说OpenCV开发一 - 环境配置和入门程序详解
- nebula注释符号
- REVERSE-PRACTICE-BUUCTF-32
- 阿里-优酷视频增强和超分辨率挑战赛冠军方案:VESR-Net
- GNOME 3.32.1 维护版本更新发布
- 【oracle】oracle常用命令汇总
- html执行严格语法标准,JS语法(ES6)
- jQuery Api 学习(一、jQuery 概念 和 jQuery 文档)
- 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(六)——放大器的频率特性
- 京东移动端URL自动跳转PC端URL插件
- 产品心理学:福格行为模型详解与应用
- 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
- [ 电子商务 ] 解读 Ad Network、Ad Exchange、DSP、SSP、RTB 和DMP 是什么?
- 老毛桃装ubuntu
- 仿CNode.js论坛学习
- 《管理学》期末第一次复习
- 《九》微信小程序中的自定义组件
- 怎么入驻印象淘宝短视频 申请通过印象淘宝条件要求
- SocketTools库版,资源重定向的处理
- 高德地图货车路径规划JS API以及WEB API在VUE中使用方法