Oracle 笔记(五)
1、 Oracle的自定义函数
2、 Oracle的触发器
3、 Oracle的存储过程
知识点一:自定义函数
语法:create [or replace] function 函数名(参数)
return返回值类型—必须
is
--变量的声明
begin
--执行语句
--return 返回变量
--exception 异常块(return 异常编号)
end;
Java:
int add(int no1,int no2)
{
int sum = no1+no2;
return sum;
}
Oracle
|
--编写一个简单的自定义函数 createorreplacefunction fun_add(no1 number,no2 number) returnnumber is v_sum number; begin v_sum := no1+no2; return v_sum; exception whenothersthen return-1; end; |
调用函数
方式一:
|
select fun_add(50,50) from dual; |
方式二:
|
declare v_no1 number(2); v_no2 number(2); v_sum number(3); begin v_no1 :=50; v_no2 :=50; v_sum := fun_add(v_no1,v_no2); if v_sum =-1then dbms_output.put_line('输入的数据有误!'); else dbms_output.put_line(v_sum); endif; exception whenothersthen dbms_output.put_line('输入的数据有误!'); end; |
知识点二:触发器 trigger(DML触发器)
语法:
create[or replace] trigger tri_名字
after|before
insert|delete|update
on 表名
[for each row]—行级触发器
begin
--执行语句块
end;
案例:删除emp表数据的时候,让emp_bak表自动备份
|
--删除emp_bak表数据的时候,让emp_bak01表自动备份 createorreplacetrigger tri_delemp afterdelete on emp_bak foreachrow begin insertinto emp_bak01(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal, :old.comm,:old.deptno); end; |
案例:创建userinfo(userid,uname,upw),userid自动+1实现
|
步骤一:创建一个表 createtable userinfo( userid number(4) primary key, uname varchar2(10)notnullunique, upw varchar2(10)notnull ) |
|
步骤二:创建序列 create sequence seq_userid; |
|
步骤三:创建触发器 createorreplacetrigger tri_userid beforeinsert on userinfo foreachrow begin select seq_userid.nextval into:new.userid from dual; end; |
|
步骤四:启动触发器 insert into userinfo(uname,upw) values('lily','123456'); |
案例:实现更改userinfo表的名字这个字段的时候,对原来数据进行备份,备份到userinfo_bak表中
知识点三:存储过程procedure
语法:
create or replace procedure pro_存储过程名称(输入参数 in,输出参数 out)
as
--变量的声明
begin
--执行过程
--exception异常处理过程
end;
案例:定义存储过程,完成userinfo表的插入功能(完成账户注册这个功能)
|
--完成userinfo表的插入功能 createorreplaceprocedure pro_userreg( v_uname in userinfo.uname%type,v_upw in userinfo.upw%type) as begin insertinto userinfo(uname,upw)values(v_uname,v_upw); end; |
|
执行存储过程 方法一:命令行执行 execute pro_userreg('jack','123456'); |
|
方法二:plsql执行 begin pro_userreg('jack','123456'); end; |
方法三:应用程序Java,C#,php调用存储过程
案例二:定义存储过程完成登录
|
--定义存储过程完成登录 createorreplaceprocedure pro_userlog( v_uname userinfo.uname%type,v_upw userinfo.upw%type, v_result outnumber) as begin selectcount(*)into v_result from userinfo where uname = v_uname and upw = v_upw; end; |
|
declare v_uname userinfo.uname%type; v_upw userinfo.upw%type; v_result number(1); begin v_uname :='jack'; v_upw :='123456'; pro_userlog(v_uname,v_upw,v_result); if v_result =1then dbms_output.put_line('登陆成功!'); else dbms_output.put_line('登陆失败!'); endif; end; |
2017-10-31 18:37:14
Oracle 笔记(五)的更多相关文章
- Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间
alter table userInfo add(msn varchar2(20)); 1.建表 create table userInfo ( id number(6), name varchar2 ...
- oracle 笔记---(五)__内存管理
###查看连接池的信息 select connection_pool,status,maxsize from dba_cpool_info
- Oracle笔记 目录索引
Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...
- 韩顺平Oracle笔记
韩顺平Oracle笔记 分类: DataBase2011-09-07 10:24 3009人阅读 评论(0) 收藏 举报 oracle数据库sqljdbcsystemstring 目录(?)[-] ...
- Oracle笔记 多表查询
Oracle笔记 多表查询 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- 《MFC游戏开发》笔记五 定时器和简单动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Oracle笔记(1) 简单查询、限定查询、数据的排序
Oracle笔记(四) 简单查询.限定查询.数据的排序 一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...
随机推荐
- 树上倍增求LCA详解
LCA(least common ancestors)最近公共祖先 指的就是对于一棵有根树,若结点z既是x的祖先,也是y的祖先(不要告诉我你不知道什么是祖先),那么z就是结点x和y的最近公共祖先. 定 ...
- mysql 主从 Last_IO_Errno错误代码说明
Last_IO_Errno错误代码说明: 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...
- matplotlib动画
注意:要有动画效果,必须独立窗口:独立窗口的设置方法:https://www.cnblogs.com/liming19680104/p/10614070.html import matplotlib. ...
- CSS的文本属性
CSS 文本属性可定义文本的外观. 通过文本属性,可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进等. ㈠缩进文本 text-indent 通过使用 text-indent 属性 ...
- jquery isDefaultPrevented()方法 语法
jquery isDefaultPrevented()方法 语法 作用:isDefaultPrevented() 方法返回指定的 event 对象上是否调用了 preventDefault() 方法. ...
- Javascript兼容各浏览器的日期转换
var date = new Date(Date.parse("2015-09-05".replace(/-/g,"/")));'2015-09-05'是无法被 ...
- Web大文件上传断点续传解决方案
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- [HG]子树问题 题解
前言 模拟赛赛时SubtaskR3没开long long丢了20分. 题意简述 题目描述 对于一棵有根树(设其节点数为 \(n\) ,则节点编号从 \(1\) 至 \(n\) ),如果它满足所有非根节 ...
- html页面中引入html
我们写页面通常会遇到这种情况,一个模块很多页面都用到,那么我们为了方便就会单独写到一个页面,然后引入进去,我知道的有三种: 1.用标签<iframe></iframe> 例: ...
- Spark译文(三)
Structured Streaming Programming Guide(结构化流编程指南) Overview(概貌) ·Structured Streaming是一种基于Spark SQL引擎的 ...