pl/sql(2)
1.存储过程
(1)存储过程的创建及改动
语法:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] datatype [{(:= | DEFAULT ) defaultvalue}] [, ...])]
{IS | AS}
BEGIN
procedure_body
END procedure_name;
语法解析:
IN:输入參数。
OUT:输出參数;
IN OUT:就可以输入也可输出的參数;
datatype:參数的数据类型。此处不能带精度。
:=|DEFAULT:用于设置參数的默认值。
(2)
例1:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
过程的调用
例2:带两个參数
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
DROP PROCEDURE test_procedure;
2.函数
过程用来完毕一项任务,可能不返回值,也可能返回多个值,过程的调用是一条PL/SQL语句;函数包括RETURN子句,用来进行数据操作,并返回一个单独的函数值,函数的调用仅仅能在一个表达式中。
语法:
--函数是能够返回值的命名的 PL/SQL 子程序。
--创建函数的语法:
CREATE [OR REPLACE] FUNCTION
<function name> [(param1,param2)]
RETURN <datatype> IS|AS
[local declarations]
BEGIN
Executable Statements;
RETURN result;
EXCEPTION
Exception handlers;
END;
例:
在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型
RETURN子句指定的数据类型能够是:
用 %ROWTYPE 属性引用表定义的记录类型
程序猿定义的记录类型
(1)触发器的分类
DML 触发器包含行级触发器、语句级触发器
自己主动生成数据
自己定义复杂的安全权限
针对周六日不能进行改动数据库:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
提供审计和日志记录
启用复杂的业务逻辑
用触发器实现自增的主键:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFudGluZ21laQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
2.效率高
3.效率低
(4)语法解析:
INSTEAD OF:仅用于替代触发器,即event_target必须为视图,并且必须带FOR EACH ROW子句
trigger_event:触发的事件。能够是DML事件(INSERT、UPDATE、DELETE、INSERT OR UPDATE、UPDATE OF column_name),系统事件(STARTUP、SHUTDOWN等)。
event_target:即指trigger_event事件是发生在哪个对象上的。如DML事件,那么event_target应该是表名或视图名,假设是系统事件,那么event_target就应该是DATABASE或SCHEMA
FOR EACH ROW:假设带此子句。即表示该触发器是行级触发器。假设省略,则是语句级触发器。
WHEN condition :用于限制行级触发器,仅仅有满足condition条件,才会触发触发器。
(5)改动触发器的状态
触发器有ENABLED和DISABLED两种状态。
改动某个触发器的状态能够运行以下的SQL:
ALTER TRIGGER trigger_name ENABLE | DISABLE;
使某个表上的全部触发器有效或无效:
ALTER TABLE table_name {ENABLE | DISABLE} ALL TRIGGERS;
(6)删除触发器
DROP TRIGGER trigger_name;
最新文章
- [转载]Extjs中的dom,Ext.Element和Ext.Component对象的关系
- 玩转Android之Drawable的使用
- Java基础知识强化之IO流笔记19:FileOutputStream的三个write方法
- 第二章实例:SimpleAdapter结合listview实现列表视图
- python 网页爬虫+保存图片+多线程+网络代理
- Servlet和JSP读书笔记(三)之Cookie
- asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
- sql语句中单引号嵌套问题
- JPA 系列教程13-复合主键-@EmbeddedId+@Embeddable
- C语言博客作业—字符数组
- python实现朴素贝叶斯
- AngularJS进阶(十三)JS利用正则表达式校验手机号
- 实战web前端之:Bootstrap框架windows下安装与使用
- js列表添加内容清除内容,时钟
- 【stm32开发之HAL采坑记之:001使用ST-LINK下载出错问题】
- node(基础三)_模块系统基础
- PHP IDE选择标准
- bzoj千题计划233:bzoj 1304: [CQOI2009]叶子的染色
- 实例化MD5CryptoServiceProvider报错:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
- .net 的page的OnInit方法
热门文章
- hashCode()方法和equals方法的重要性。
- DiskGenius
- POJ3668 Game of Lines
- CodeForces 659D	Bicycle Race (判断点是否为危险点)
- poj1039 Pipe(计算几何叉积求交点)
- Linux系统调用--getrlimit()与setrlimit()函数详解【转】
- Visual Studio Code 好用的 source code editor
- js生成一周内的日期+周几
- (4) python--seaborn
- (3)新概念英语一(11-20)lessons