热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle数据库之PL/SQL

Oracle数据库总结:Oracle数据库之集合运算Oracle数据库之数据处理Oracle数据库之建表和管理表Oracle数据库之对象视图、索引、序列、同义词一、语法结构:de

Oracle数据库总结:

Oracle数据库之集合运算
Oracle数据库之数据处理
Oracle数据库之建表和管理表
Oracle数据库之对象视图、索引、序列、同义词

一、语法结构:

declare 
--说明部分
begin
--sql语句
exception
--例外处理语句
end;
/

二、变量说明

变量类型:char、varhchar2、number、longdateboolean
普通变量:
var1 varchar2(20);
记录型变量:
emp1 emp%rowtype;
引用型变量:
emp2 emp.empno%type;
--查询并打印5478的姓名和薪水
set serveroutput on

declare
--定义变量保存姓名和薪水
--pename varchar(20);

--psal number;
pename emp.ename%type;
psal emp.sal%type;
begin
--得到姓名和薪水
select ename,sal into pename,psal from emp where empno=7839;

dbms_output.put_line(pename||'的薪水是'||psal);
end;
/
--查询并打印5478的姓名和薪水
set serveroutput on
declare
--定义记录型变量:代表一行
emp_rec emp%rowtype;

begin
select * into emp_rec from emp where empno=7839;


dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);
end;
/

三、循环体
1)if判断语句
语法结构:

if 条件 then 语句1
语句2
end if;

if 条件 then 语句1
语句2
elsif 条件 then 语句3
语句4
end if;

if 条件 then 语句1
语句2
elsif 条件 then 语句3
语句4
else
语句5
end if;
--判断用户从键盘上输入的数字
set serveroutput on

--接收键盘输入
--num: 地址值,在地址上保存了输入的数字
accept num prompt '请输入一个数字';

declare
--定义变量,保存输入的数字
pnum number := #
begin
if pnum = 0 then dbms_output.put_line('您输入的是0');
elsif pnum = 1 then dbms_output.put_line('您输入的是1');
elsif pnum = 2 then dbms_output.put_line('您输入的是2');
else dbms_output.put_line('其他数字');
end if;
end;
/

2)循环结构

while 条件
loop
语句
end loop

loop
exit when 条件
语句
end loop

for i in 1..3
loop
语句
end loop;
--打印1~10
set serveroutput on
declare
pnum number := 1;

begin
loop
--退出条件
exit when pnum > 10;


dbms_output.put_line(pnum);

--加一
pnum := pnum + 1;
end loop;
end;
/

四、光标(cursor)
1)语法规则

cursor cursorname[(参数名 数据类型...)]
is select语句

2)使用步骤

打开光标:open cursorname;

抓取数据:fetch cursorname into 变量;

关闭光标:close cursorname;
--查询并打印员工的姓名和薪水
/*
1. 光标的属性
%isopen %rowcount (影响的行数)
%found %notfound

*/

set serveroutput on
declare
-- 定义光标
cursor cemp is select ename,sal from emp;

pename emp.ename%type;
psal emp.sal%type;
begin
--打开光标
open cemp;


loop
--取一条记录
fetch cemp into pename,psal;
--exit when 没有取到记录;
exit when cemp%notfound;

dbms_output.put_line(pename||'的薪水是'||psal);

end loop;

--关闭光标
close cemp;
end;
/
set serveroutput on

declare
--说明部分
begin
--程序
dbms_output.put_line('Hello World');

end;
/

五、异常处理

1)系统异常

no_data_found:没有数据
to_many_rows:太多行
zero_divide:0
value_error:算数或者转换错误
timeout_on_resource:等待资源时超时
--被0
set serveroutput on

declare
pnum number;
begin
pnum := 1/0;

exception
when zero_divide then dbms_output.put_line('1:0不能做被除数');
dbms_output.put_line('2:0不能做被除数');
when value_error then dbms_output.put_line('算术或者转换错误');
when others then dbms_output.put_line('其他例外');
end;
/

实例一:

--涨工资,总裁10000 经理5000 其他4000
set serveroutput on

declare
--员工的集合
--alter table "SCOTT"."EMP" rename column "JOB" to empjob
cursor cemp is select empno,empjob from emp;

pempno emp.empno%type;
pjob emp.empjob%type;
begin
rollback;


open cemp;

loop
--取一个员工
fetch cemp into pempno,pjob;
exit when cemp%notfound;

--判断职位
if pjob = 'PRESIDENT' then update emp set sal=sal+10000 where empno=pempno;
elsif pjob = 'MANAGER' then update emp set sal=sal+5000 where empno=pempno;
else update emp set sal=sal+4000 where empno=pempno;
end if;
end loop;

close cemp;


commit;

dbms_output.put_line('完成');
end;
/

实例二:

--查询某个部门的员工姓名
set serveroutput on
declare
cursor cemp(dno number) is select ename from emp where deptno=dno;

pename emp.ename%type;
begin
open cemp(10);

loop
fetch cemp into pename;
exit when cemp%notfound;

dbms_output.put_line(pename);

end loop;
close cemp;
end;
/

实例三:

--查询并打印100号部门的员工姓名
set serveroutput on

declare
cursor cemp is select ename from emp where deptno=100;

pename emp.ename%type;

--自定义例外
no_emp_found exception;
begin
open cemp;


--取一条记录
fetch cemp into pename;

if cemp%notfound then
--抛出例外
raise no_emp_found;
end if;

close cemp;

exception
when no_emp_found then dbms_output.put_line('没有找到员工');
when others then dbms_output.put_line('其他例外');
end;
/










推荐阅读
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
author-avatar
无休止的等待Happy_212
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有