热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle(3)pl/sql编程基础存储过程、函数、包、触发器

oracle(3)pl/sql编程基础存储过程、函数、包、触发器PLSQL编程(1)1、过程、函数、触发器是pl/sql编写2、过程、函数触发器是在oracle中3、pl/sql是非常强大的数据库过程语言4、过程,函数可以在java程序中调用...SyntaxHighlighte

oracle(3)pl/sql编程基础存储过程、函数、包、触发器
 
PLSQL编程(1)
1、过程、函数、触发器是pl/sql编写
2、过程、函数触发器是在oracle中
3、pl/sql是非常强大的数据库过程语言
4、过程,函数可以在java程序中调用
  www.2cto.com  
PL/SQL
优点:
a 提高应用程序的运行性能
b 模块化的设计思想[分页的过程、订单的过程、转账的过程...]
c 减少网络传输量
d 提高安全性(例如:直接在java里写密码)
缺点:
移植性不好(换数据库 就要重写过程)
 
案例1;
1 创建一个表
create table mytest(name varchar2(30),passwd varchar2(30));
2 创建过程
create or replace procedure sp_pro1 is
begin
--执行部分
insert into mytest values('kyle','123456');
end;  www.2cto.com  
replace :表示如果有sp_pro1 就替换
如何查看错误信息
show error
 
3如何调用该过程(两种方法)
a exec 过程名(参数值1,参数值2...);
b call 过程名(参数值1,参数值2...);
没有参数值,就直接是 exec 过程名 /call 过程名
案例2;
create or replace procedure sp_pro2 is
begin
delete from mytest where name='kyle';
end;
C.编写规范
a 注释
单行注释 --
select * from emp where empno=7788;--取得员工信息
多行注释
/*....*/来划分
b 标识符号的命名规范
1)当定义变量时,建议用v_做为前缀v_sal
1)当定义常量时,建议用c_做为前缀c_rate
1)当定义游标时,建议用_cursor做为前缀emp_cursor
1)当定义例外时,建议用e_做为前缀e_error
  www.2cto.com  
D.块 介绍
块(block)是pl/sql的基础程序单元,编写pl/sql程序实际上就是编写pl/sql块。
要完成相对简单的应用功能,可能只需要编写一个pl/sql块;但是如果要想实现
复杂的功能,可能需要在一个pl/sql块中嵌套起它的pl/sql块。
E.块的结构示意图
pl/sql块由三个部分构成:定义部分、执行部分、例外处理部分。
如下所示:
declear
/*定义部分--定义常量、变量、游标、例外、复杂数据类型*/
begin
/*执行部分--要执行的pl/sql语句和sql语句*/
exception
/*例外处理部分--处理运行的各种错误*/
end;
特别说明:定义部分是从declare开始的,该部分是可选的
执行部分是从begin开始的,该部分是必须的
例外处理部分是从exception开始的,该部分是可选的
 
案例2
--最简单的块
begin
dbms_output.put_line('hello,world');
end;  www.2cto.com  
set serveroutput on --打开输出选项
set serveroutput off --关闭输出选项
案例3
--有定义和执行部分的块
declare
--定义变量
v_ename varchar2(5);
v_sal number(7,2);
begin
--执行部分
select ename,sal into v_ename,v_sal from emp where empno=&aa;
--在控制台显示用户名
dbms_output.put_line('用户名是:'||v_ename||'工资:'||v_sal);
--异常处理
exception
when no_data_found then
dbms_output.put_line('朋友,你的编号输入有误!');
end;
*相关说明:
&表示要接受从控制台输入的变量
 
F.简单分类
                             |----过程(存储过程)
                             |
                             |----函数
 块(编程)  -----|
                             |----触发器
                             |
                             |----包
过程:
案例4
create procedure sp_pro3(spName varchar2,newSal number) is
begin  www.2cto.com  
--执行部分,根据用户名去修改工资
update emp set sal=newSal where ename=spName;
end;
exec sp_pro3('SCOTT',4678);
如何在java程序中调用一个存储过程
public class TestOraclePro{
   public static void main(String []args){
 try{
            //1.加载驱动
     Class.forName("oracle.jdbc.driver.OracleDriver");
     //2.得到连接
     Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:hs","system","123456");
     //3.创建CallableStatement
     CallableStatement cs = ct.prepareCall("{call sp_pro3(?,?)}");
     //4.赋值
     cs.setString(1,"kyle");
     cs.setInt(2,10);
     //执行
     cs.execute();
     //关闭
     cs.close();
     ct.close();
 }catch(Exception e){
     e.printStackTrace();
 }  www.2cto.com  
   }
}
函数:函数 用于返回特定的数据,当建立函数时,在函数头部必须包含return字句
,而在函数体内必须包含return语句返回的数据
--函数案例
--输入雇员的姓名,返回该雇员的年薪
create function sp_fun2(spName varchar2)
return number is yearSal number(7,2);
begin
--执行部分
select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName;
return yearSal;
end;
 
在sqlplus中调用函数
sql> var abc number
sql> call sp_fun2('SCOTT') into:abc;
sql> print abc;
在java程序中调用该函数
select annual.income("SCOTT") from dual;
可以通过rs.getInt(1)得到返回的结果
 
包  
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
a.可以使用create package 命令来创建包:
实例:  www.2cto.com  
--创建包
--创建一个包sp_package
--声明该包有一个过程update_sal
--声明该包有一个函数annual_income
create package sp_package is
procedure update_sal(name varchar2,newsal number);
function annual_income(name varchar2) return number;
end;
包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。
包体用于实现包规范中的过程和函数,
b.建立包体可以使用create package body 命令
--给包sp_package 实现包体
create or replace package body sp_package is
procedure update_sal(name varchar2,newsal number);
is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin  www.2cto.com  
select sal*12+nvl(comm,0) into annual_salary from emp
where ename=name;
return annual_salary;
end;
end;
 
c.如何调用包的过程或是函数
当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要
访问其他方案的包,还需要在包名前加方案名。
sql>call sp_package.update_sal('SCOTT',1500);
 
触发器
触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定除非的事件和触发的操作,
常用的触发事件包括insert,update,delete语句,而触发操作实际上就是一个pl/sql
块。可以使用create trigger 来建立触发器。
 
 
作者 kyle8525_nsn

推荐阅读
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 信息安全等级保护是指对国家秘密信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实 ... [详细]
  • 无线认证设置故障排除方法及注意事项
    本文介绍了解决无线认证设置故障的方法和注意事项,包括检查无线路由器工作状态、关闭手机休眠状态下的网络设置、重启路由器、更改认证类型、恢复出厂设置和手机网络设置等。通过这些方法,可以解决无线认证设置可能出现的问题,确保无线网络正常连接和上网。同时,还提供了一些注意事项,以便用户在进行无线认证设置时能够正确操作。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了相机防抖的设置方法和使用技巧,包括索尼防抖设置、VR和Stabilizer档位的选择、机身菜单设置等。同时解释了相机防抖的原理,包括电子防抖和光学防抖的区别,以及它们对画质细节的影响。此外,还提到了一些运动相机的防抖方法,如大疆的Osmo Action的Rock Steady技术。通过本文,你将更好地理解相机防抖的重要性和使用技巧,提高拍摄体验。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文详细介绍了华为4GLTE路由器B310的外置天线安装和设置方法。通过连接电源和网线,输入路由器的IP并登陆设置页面,选择手动设置和手动因特网设置,输入ISP提供商的用户名和密码,并设置MTU值。同时,还介绍了无线加密的设置方法。最后,将外网线连在路由器的WAN口即可使用。 ... [详细]
  • 本文讨论了前端工程化的准备工作,主要包括性能优化、安全防护和监控等方面需要注意的事项。通过系统的答案,帮助前端开发者更好地进行工程化的准备工作,提升网站的性能、安全性和监控能力。 ... [详细]
author-avatar
手机用户2502935311
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有