Oracle基本PLSQL的使用实例详解
发布时间 - 2026-01-11 01:07:20 点击率:次Oracle基本PLSQL的使用实例详解

PL/SQL 块是在 SQL 语言之上发展起来的一种应用,可以集中的处理各种复杂的 SQL 操 作。
组成:
DECLARE: 声明部分 BEGIN 编写主题 EXCEPTION 捕获异常 END;
1.一个简单的PL/SQL块
DECLARE
i number;
BEGIN
I:=30;
DBMS_OUTPUT.put_line('I的内容为:'||i);
END;
此时,直接执行程序即可。
执行之后发现没有任何的输出。因为 Oracle 在系统设置中默认设置了输出不显示,如果要 显示的话,输入以下命令:
set serveroutput on;如果是使用Toad,则可以在Desktop中选择PLSQL,并打开DBMS OUTPUT。
带异常的语句块
DECLARE
i number;
BEGIN
i:=1/0;
EXCEPTION
when ZERO_DIVIDE then
DBMS_OUTPUT.put_line("There is a Exception");
END;
注意:输出字符串应该使用单引号''。
2.PL/SQL块还可以接收用户的输入信息,例如:现在要求用户输入一个雇员编号,之后根据输入的内容进行查询,查询雇员的姓名。
用户的输入信息使用“&”完成
DECLARE
eno number;
en varchar(20);
BEGIN
--输入的信息保存在eno里
eno:=&no;
--之后根据eno的值,对数据库进行查询操作。
select ename into en from emp where empno = eno;
DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的姓名为:'||en);
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.put_line('没有此雇员');
END;
3.在以上的查询中再进一步:可以根据雇员的编号查出姓名及其领导的姓名和所在的部门, 进行显示。
DECLARE
eno emp.empno%TYPE ;
en emp.ename%TYPE ;
mn emp.ename%TYPE ;
dn dept.dname%TYPE ;
dept dept %rowtype ;
BEGIN
-- 输入的信息保存在 eno 里
eno := &no ;
-- 之后根据 eno 的值,对数据库进行查询操作
SELECT e.ename,m.ename,d.dname INTO en,mn,dn
FROM emp e,dept d,emp m
WHERE e.empno=7369 AND e.mgr=m.empno AND e.deptno=d.deptno ;
DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的姓名为:'||en) ;
DBMS_OUTPUT.put_line('编号为:'||eno||'雇员的上级姓名为:'||mn) ;
DBMS_OUTPUT.put_line('编号为:'||eno||'雇员所在的部门:'||dn) ;
DBMS_OUTPUT.put_line(dept.deptno) ;
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.put_line('没有此雇员') ;
END ;
说明:
• no_data_found 一种异常类型:没有发现数据
• emp.empno%TYPE ; :表示以 emp 表中的 empno 字段的类型定义变量
• e.ename,m.ename,d.dname INTO en,mn,dn:一次可以同时放进去多个值
dept dept %rowtype ; 表示 dept 是一行数据
PL/SQL 之中也包含了:循环、分支等条件控制语句
4.Loop 循环(类似do…while)
格式:
LOOP 循环的语句 ; EXIT WHEN 终止条件 ; 循环条件必须更改 ; END LOOP ;
例如:循环输出 1~10。
DECLARE
countNum NUMBER ;
BEGIN
--必须赋初值
countNum := 1 ;
LOOP
DBMS_OUTPUT.put_line('countNum = '||countNum) ;
EXIT WHEN countNum>10 ;
countNum := countNum + 1 ;
END LOOP ;
END ;
注意:count关键字只能在sql语句中使用
此循环是先执行一次之后再进行判断,执行结果到11结束循环
5.while 循环
格式:
WHILE(判断循环的条件) LOOP 循环的语句 ; 循环条件的改变 ; END LOOP ;
使用此语句修改上面的程序:
DECLARE
countNum NUMBER ;
BEGIN
--必须赋初值
countNum := 1 ;
WHILE(countNum<10)
LOOP
DBMS_OUTPUT.put_line('countNum = '||countNum) ;
countNum := countNum + 1 ;
END LOOP ;
END ;
此语句,是先判断,如果满足条件则继续执行循环体,执行结果到9结束循环
6.for 循环
格式:
FOR 变量名称 in 变量的初始值..结束值
LOOP
循环语句 ;
END LOOP ;
修改上例:
DECLARE
countNum NUMBER ;
BEGIN
FOR countNum IN 1..10
LOOP
DBMS_OUTPUT.put_line('countNum = '||countNum) ;
END LOOP ;
END ;
此语句countNum大于等于1小于等于10,最后输出1-10
7.if语句
条件判断
格式:
IF 条件 THEN 满足条件时,执行此语句 END IF ;
例:
DECLARE
countNum NUMBER ;
BEGIN
countNum := 11 ;
IF countNum>10 THEN
DBMS_OUTPUT.put_line('countNum = '||countNum) ;
END IF ;
END ;
条件语句,满足条件,执行一次
8.IF…ELSE 语句
如果 IF 满足了,则执行,否则执行 ELSE
例:
DECLARE
countNum NUMBER ;
BEGIN
countNum := 1 ;
IF countNum>10 THEN
DBMS_OUTPUT.put_line('countNum = '||countNum) ;
ELSE
DBMS_OUTPUT.put_line('条件不不成立') ;
END IF ;
END ;
条件不满足执行else后面的语句
9.if…elsif…else 语句
例:
DECLARE
countNum NUMBER ;
BEGIN
countNum := 1 ;
IF countNum>10 THEN
DBMS_OUTPUT.put_line('countNum = '||countNum);
ELSIF countNum<5 THEN
DBMS_OUTPUT.put_line('值小于 5');
ELSE
DBMS_OUTPUT.put_line('条件不满足');
END IF ;
END ;
多重判断语句,满足条件执行对应的跳转
10.goto语句
无条件跳转语句
用于程序控制非条件跳至指定标签<<???>>。不易控制和维护,慎用!
DECLARE
eno emp.empno%TYPE ;
sal emp.sal%TYPE ;
BEGIN
eno := &en ;
SELECT sal INTO sal FROM emp WHERE empno=eno ;
IF sal>3500 THEN
goto po1 ;
ELSIF sal>2000 THEN
goto po2 ;
ELSE
goto po3 ;
END IF;
--标签
<<po1>> DBMS_OUTPUT.put_line('高工资。。。') ;
<<po2>> DBMS_OUTPUT.put_line('中等工资。。') ;
<<po3>> DBMS_OUTPUT.put_line('低工资。。。') ;
END;
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Oracle基本PLSQL的使用
# Oracle
# PLSQL详解
# PLSQL导入dmp文件的详细完整步骤
# plsql 连接oracle数据库详细配置的方法步骤
# PLSQL连接oracle数据库过程图解
# PLSQL创建新用户并导入导出.dmp文件全过程
# 跳转
# 不满足
# 是在
# 还可以
# 多个
# 没有任何
# 希望能
# 中也
# 谢谢大家
# 则可
# 可以根据
# 系统设置
# 默认设置
# 不不
# 中再
# 单引号
# 高工资
# 包含了
# 低工资
# 只能在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
七夕网站制作视频,七夕大促活动怎么报名?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何在阿里云高效完成企业建站全流程?
网站建设整体流程解析,建站其实很容易!
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
在centOS 7安装mysql 5.7的详细教程
详解Android——蓝牙技术 带你实现终端间数据传输
公司门户网站制作流程,华为官网怎么做?
js实现获取鼠标当前的位置
android nfc常用标签读取总结
EditPlus中的正则表达式实战(5)
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
如何在IIS中新建站点并配置端口与物理路径?
Laravel如何使用Sanctum进行API认证?(SPA实战)
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何用狗爹虚拟主机快速搭建网站?
JavaScript如何操作视频_媒体API怎么控制播放
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
如何用5美元大硬盘VPS安全高效搭建个人网站?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel如何使用Gate和Policy进行授权?(权限控制)
动图在线制作网站有哪些,滑动动图图集怎么做?
如何批量查询域名的建站时间记录?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Linux系统运维自动化项目教程_Ansible批量管理实战
音响网站制作视频教程,隆霸音响官方网站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何确保FTP站点访问权限与数据传输安全?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
如何实现建站之星域名转发设置?
想要更高端的建设网站,这些原则一定要坚持!
Android中AutoCompleteTextView自动提示
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在宝塔面板中修改默认建站目录?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
高端智能建站公司优选:品牌定制与SEO优化一站式服务
C#如何调用原生C++ COM对象详解
Android滚轮选择时间控件使用详解
如何确认建站备案号应放置的具体位置?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
详解Oracle修改字段类型方法总结
Laravel观察者模式如何使用_Laravel Model Observer配置

