- 浏览: 1329315 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
Oracle_过程(Procedure)_函数(Function)_包(Package)_触发器(Trigger)
PL/SQL程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:
过程和函数
过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数,没有返回值。函数和过程都可以
通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。过程是作为一个独立执行语句调用的:
pay_involume(invoice_nbr,30,due_date);
函数以合法的表达式的方式调用:
order_volumn:=open_orders(SYSDATE,30);
创建过程的语法如下:
CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name [parameter_lister] {AS|IS} declaration_section BEGIN executable_section [EXCEPTION exception_section] END [procedure_name] |
每个参数的语法如下:
paramter_name mode datatype [(:=|DEFAULT) value]
mode有三种形式:IN、OUT、INOUT。
IN表示在调用过程的时候,实际参数的取值被传递给该过程,形式参数被认为是只读的,当过程结束时,控制会返回控制环境,实际参数的值不会改变。
OUT在调用过程时实际参数的取值都将被忽略,在过程内部形式参数只能是被赋值,而不能从中读取数据,在过程结束后形式参数的内容将被赋予实际参数。
INOUT这种模式是IN和OUT的组合;在过程内部实际参数的值会传递给形式参数,形势参数的值可读也可写,过程结束后,形势参数的值将赋予实际参数。
创建函数的语法和过程的语法基本相同,唯一的区别在于函数有RETUREN子句
CREATE [ OR REPLACE] FINCTION [schema.]function_name [parameter_list] RETURN returning_datatype {AS|IS} declaration_section BEGIN executable_section [EXCEPTION] exception_section END [procedure_name] |
在执行部分函数必须有哟个或多个return语句。
在创建函数中可以调用单行函数和组函数,例如:
CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER) RETURN NUMBER IS pi NUMBER=ACOS(-1); RadiansPerDegree NUMBER; BEGIN RadiansPerDegree=pi/180; RETURN(SIN(DegreesIn*RadiansPerDegree)); END |
包
包是一种将过程、函数和数据结构捆绑在一起的容器;包由两个部分组成:外部可视包规范,包括函数头,过程头,和外部可视数据结构;另一部分是包主体(package body),包主体包含了所有被捆绑的过程和函数的声明、执行、异常处理部分。
打包的PL/SQL程序和没有打包的有很大的差异,包数据在用户的整个会话期间都一直存在,当用户获得包的执行授权时,就等于获得包规范中的所有程序
和数据结构的权限。但不能只对包中的某一个函数或过程进行授权。包可以重载过程和函数,在包内可以用同一个名字声明多个程序,在运行时根据参数的数目和数
据类型调用正确的程序。
创建包必须首先创建包规范,创建包规范的语法如下:
CREATE [OR REPLACE] PACKAGE package_name {AS|IS} public_variable_declarations | public_type_declarations | public_exception_declarations | public_cursor_declarations | function_declarations | procedure_specifications END [package_name] |
创建包主体使用CREATE PACKAGE BODY语句:
CREATE [OR REPLACE] PACKAGE BODY package_name {AS|IS} private_variable_declarations | private_type_declarations | private_exception_declarations | private_cursor_declarations | function_declarations | procedure_specifications END [package_name] |
私有数据结构是那些在包主体内部,对被调用程序而言是不可见的。
触发器(Triggers)
触发器是一种自动执行响应数据库变化的程序。可以设置为在触发器事件之前或之后触发或执行。能够触发触发器事件的事件包括下面几种:
DML事件
DDL事件
数据库事件
DML事件触发器可以是语句或行级触发器。DML语句触发器在触发语句之前或之后触发DML行级触发器在语句影响的行变化之前或之后触发。用户可以给单一事件和类型定义多个触发器,但没有任何方法可以增强多触发器触发的命令。下表列出了用户可以利用的触发器事件:
事件 | 触发器描述 |
INSERT | 当向表或视图插入一行时触发触发器 |
UPDATE | 更新表或视图中的某一行时触发触发器 |
DELETE | 从表或视图中删除某一行时触发触发器 |
CREATE | 当使用CREATE语句为数据库或项目增加一个对象时触发触发器 |
ALTER | 当使用ALTER语句为更改一个数据库或项目的对象时触发触发器 |
DROP | 当使用DROP语句删除一个数据库或项目的对象时触发触发器 |
START | 打开数据库时触发触发器,在事件后触发 |
SHUTDOWN | 关闭数据库时触发,事件前触发 |
LOGON | 当一个会话建立时触发,事件前触发 |
LOGOFF | 当关闭会话时触发,事件前触发 |
SERVER | 服务器错误发生时触发触发器,事件后触发 |
创建触发器的语法如下:
CREATE [OR REPLACE] TRIGGER trigger_name {before|after|instead of} event ON {table_or_view_name|DATABASE} [FOR EACH ROW[WHEN condition]] trigger_body |
只有DML触发器(INSERT、UPDATE、DELETE)语句可以使用INSTEAD OF触发器并且只有表的DML触发器可以是BEFORE或AFTER触发器。
象约束一样触发器可以被设置为禁用或启用来关闭或打开他们的执行体(EXECUTE),将触发器设置为禁用或启用使用ALTER TRIGGER语句:
ALTER TRIGGER trigger_name ENABLE; ALTER TRIGGER trigger_name DISABLE; |
要禁用或启用表的所有触发器,使用ALTER TABLE语句
ALTER TABLE table_name DISABLE ALL TRIGGERS; ALTER TABLE table_name ENABLE ALL TRIGGERS; |
删除触发器使用DROP TRIGGER
DROP TRIGGER trigger_name;
http://hi.baidu.com/dinghuai/blog/item/66c4dcbf98be790d19d81f80.html
发表评论
-
【Mysql】Windows下data文件迁移到别的磁盘,win10_win7开发机磁盘满了怎么办?
2022-01-04 17:21 241= = = 网上的处理办法是: 1备份数据。 ... -
【转】MySQL数据库之数据类型BOOL/BOOLEAN与TINYINT测试总结
2020-04-12 15:54 697= = = (一) 数据类型测试 (1). 布尔类型 ... -
IDEA连接mysql又报错!Server returns invalid timezone.
2020-04-08 11:10 432= 解决方法: 在sql ... -
mysql.sock作用-解决mysql.sock直接找不到了的问题-重新生成mysql.sock
2018-04-11 14:48 4937= = = mysql.sock作用-解决mysql. ... -
Mybatis之foreach批量insert返回主键id列表_Jdbc批量插入并返回主键id列表
2017-01-17 17:35 24712016/05/14 14:14 然而官方已经修复了 @a ... -
Mysql的wait_timeout解决-MySQL查看和修改wait_timeout
2015-07-23 19:45 6253mysql存在一项属性“wait_timeout”, ... -
Ubuntu_Mysql_移动数据存储位置_软连接失败_软连接var目录失败
2013-06-10 23:48 2234linux系统对权限的控制很好,但也成为各种问题的多 ... -
DB-Mysql-Can't connect to local MySQL server through socket '/var/run/mysqld/mys
2013-04-24 11:03 1664错误病症: Error: Can't connec ... -
(摘)DB_MySql_命令行_SQL结果_导出到文本_方法小结
2012-05-20 00:01 1517点评:第3个方法很好阿! 有时候需要把数据 ... -
MySQL_使用group_distinct后_如何得到总记录数(行数)
2012-03-22 19:48 2052MySQL_使用group_distinct ... -
MySQL_用一条SQL语句删除重复记录
2011-12-08 13:51 1677MySQL 一条SQL语句删除重复记录 不正确的 ... -
MySQL_导入导出工具mysqlimport用法详解
2011-09-30 17:00 2948MySQL_导入导出工具mys ... -
Mysql_mysqldump命令错误解决_
2011-09-30 16:16 1595Error|错误: mysqldump: Got er ... -
Mysql_不能用ip链接_能用localhost127.0.0.1链接_Ubuntu
2011-09-30 13:57 2954Mysql_不能用ip链接_能用localhost 和 ... -
Mysql_字符集设置
2011-09-20 22:48 1285Linux Ubuntu ubuntu上mys ... -
Mysql_字符串函数大全
2011-08-23 16:41 1136如果结果的长度大于服务器参数max_allowed ... -
数据库sql语句的exists总结
2011-08-11 18:53 4025数据库sql语句的exists总 ... -
查看memcache状态及缓存命中_持续整理中
2011-08-04 15:44 1941先占个位置: 之前是在使用网上有人用 ... -
Sql_拾疑_整理_搜集
2011-08-03 19:24 1190MYSQL是目前用的,如有变化,会说明。 #Union ... -
Mysql_AddOrUpdate_A better way to add or update MySQL rows
2011-03-03 13:11 1490有时候,这个东西能省略不少事情~ INSERT I ...
相关推荐
CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW BEGIN -- 触发器代码 END; ``` 6. **包**: 包是存储过程和函数的集合,可以包含公共和私有变量、常量、游标等。包提供了一种组织和...
3. Package不能被声明为AT,只有package所拥有的function和procedure才能声明为AT。 4. AT程序必须以commit或rollback结尾,否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled ...
本文将深入探讨PL/SQL中的三个关键概念:函数、包和触发器,以及它们在Oracle数据库系统中的应用。 ### 1. 函数(Functions) 函数是PL/SQL中可重用的代码单元,它们接收输入参数,执行计算或操作,并返回一个结果...
在Oracle数据库中,存储过程、函数、包和触发器是PL/SQL编程的重要组成部分,它们提供了高级的数据处理和业务逻辑管理功能。 存储过程是预编译的PL/SQL代码块,设计用于执行特定任务。当你需要多次执行相同或类似的...
Oracle数据库是广泛应用于大型企业级数据管理的一种关系型数据库系统,它支持丰富的数据库技术,包括存储过程、函数、触发器和包等高级特性。这些特性极大地增强了数据库的灵活性和功能,使得开发者能够创建复杂的...
3. PL/SQL程序单元:PL/SQL程序可以分为若干种单元,如过程(PROCEDURE)、函数(FUNCTION)、包(PACKAGE)、触发器(TRIGGER)。过程和函数是可重用的代码段,其中函数返回值,而过程不返回。包则是一种组织和管理...
3. **PL/SQL程序单元**:包括过程(PROCEDURE)、函数(FUNCTION)、包(PACKAGE)、触发器(TRIGGER)等,它们是PL/SQL程序的基本构建块。每个程序单元都有自己的作用域和生命周期。 4. **控制流语句**:如IF-THEN...
PL/SQL中的子程序包括过程(PROCEDURE)和函数(FUNCTION)。过程不返回值,而函数必须返回一个值。定义一个简单的函数: ```sql CREATE OR REPLACE FUNCTION get_sum(a NUMBER, b NUMBER) RETURN NUMBER IS sum_...
7. **包(PACKAGE)**:包是将相关的常量、类型、过程和函数组织在一起的方式,提供更好的代码管理和重用。例如: ```sql CREATE OR REPLACE PACKAGE pkg_name AS CONSTANT const_name CONSTANT_TYPE := constant...
### Oracle PL/SQL编程 创建存储过程、函数、触发器等 #### 一、PL/SQL 概念回顾 PL/SQL(Procedural Language for SQL)是Oracle数据库中的一种过程化语言,它结合了SQL的强大数据操作能力和传统过程化语言的控制...
### ORACLE_PlSql-甲骨文学习笔记 #### 一、创建表 ##### 创建表一 ```sql CREATE TABLE TABLE_NAME ( AAA INTEGER CONSTRAINT PK_TABLE_NAME PRIMARY KEY, BBB VARCHAR2(10) NOT NULL, DOB DATE, CCC VARCHAR...
这些知识点涵盖了PL/SQL的基本语法、控制结构、异常处理、存储过程与函数、软件包管理、以及触发器等重要概念。 ### 1. 基本语法 #### %type用法 `%type`是PL/SQL中的一个特性,它允许我们定义一个变量或列,其...
- 已命名的块:包括过程(PROCEDURE)和函数(FUNCTION),它们可以存储在数据库中,供多次调用。函数与过程的区别在于函数需要返回一个值。 程序结构可以是: - 应用程序中的 PL/SQL 块,比如在 Developer/2000 ...
此外,Oracle还提供了包(Package)的概念,它允许我们将相关的函数、过程和变量封装在一起,形成一个模块化的单元。包的创建包括包规范(Specification)和包体(Body)两部分: ```sql CREATE OR REPLACE PACKAGE...
Oracle数据库中的PL/SQL包和触发器是数据库开发中重要的组成部分,它们提供了强大的功能和代码组织方式。在本章中,我们将深入理解如何创建和管理这些元素。 首先,让我们了解什么是PL/SQL包。包(Package)是PL/...
Oracle PL/SQL 命名对象是 Oracle 数据库应用教程的第十三章,主要介绍存储过程、函数、包和触发器的应用。这些命名对象都是 PL/SQL 语言的基本组成部分,用于实现各种数据库操作和业务逻辑。 1. 存储过程 存储...
- `SELECT * FROM dba_objects`涵盖了所有的数据库对象,包括CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY、PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE和UNDEFINED以及VIEW...