过程和函数 过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数,没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。过程是作为一个独立执行语句调用的:
pay_involume(invoice_nbr,30,due_date);
函数以合法的表达式的方式调用:
order_volumn:=open_orders(SYSDATE,30);
创建过程的语法如下:
CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name [parameter_lister]
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
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
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
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 [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 TRIGGER table_name DISABLE ALL TRIGGER; ALTER TRIGGER table_name ENABLE ALL TRIGGER; |
删除触发器使用DROP TRIGGER
DROP TRIGGER trigger_name; |
数据字典 Oracle数据字典包含了用户数据库的元数据。带下划线的表名称中带OBJ$、UET$、SOURCE$,这些表是在执行CREATE DATABASE语句期间由sql.bsq脚本创建的,一般情况下用户很少访问这些表。脚本catalog.sql(通常位于$oracle_home/rdbms/admin)在CREATE DATABASE语句之后立即运行,创建数据字典视图。
数据字典视图大致可以分为三类:
.前缀为USER_的数据字典视图,包含了用户拥有的对象的信息。
.前缀为ALL_的数据字典视图,包含了用户当前可以访问的全部对象和权限的信息。
.前缀为DBA_的数据字典视图,包含了数据库拥有的所有对象和权限的信息。
在绝大多数数据字典视图中都有象DBA_TABLES,ALL_TABLES和USER_TABLES这样的视图家族。Oracle中有超过100个视图家族,所以要全面介绍这些视图家族是单调乏味的而且没有多大的意义。在下表中列出了最重要和最常用的视图家族,需要注意的是每个视图家族都有一个DBA_,一个ALL_一个USER_视图。
视图家族(View Family) |
描述 |
COL_PRIVS |
包含了表的列权限,包括授予者、被授予者和权限 |
EXTENTS |
数据范围信息,比如数据文件,数据段名(segment_name)和大小 |
INDEXES |
索引信息,比如类型、唯一性和被涉及的表 |
IND_COLUMNS |
索引列信息,比如索引上的列的排序方式 |
OBJECTS |
对象信息,比如状态和DDL time |
ROLE_PRIVS |
角色权限,比如GRANT和ADMIN选项 |
SEGMENTS |
表和索引的数据段信息,比如tablespace和storage |
SEQUECNCES |
序列信息,比如序列的cache、cycle和ast_number |
SOURCE |
除触发器之外的所有内置过程、函数、包的源代码 |
SYNONYMS |
别名信息,比如引用的对象和数据库链接db_link |
SYS_PRIVS |
系统权限,比如grantee、privilege、admin选项 |
TAB_COLUMNS |
表和视图的列信息,包括列的数据类型 |
TAB_PRIVS |
表权限,比如授予者、被授予者和权限 |
TABLES |
表信息,比如表空间(tablespace),存储参数(storage parms)和数据行的数量 |
TRIGGERS |
触发器信息,比如类型、事件、触发体(trigger body) |
USERS |
用户信息,比如临时的和缺省的表空间 |
VIEWS |
视图信息,包括视图定义 |
在Oracle中还有一些不常用的数据字典表,但这些表不是真正的字典家族,他们都是一些重要的单一的视图。
VIEW NAME |
描述 |
USER_COL_PRIVS_MADE |
用户授予他人的列权限 |
USER_COL_PRIVS_RECD |
用户获得的列权限 |
USER_TAB_PRIVS_MADE |
用户授予他人的表权限 |
USER_TAB_PRIVS_RECD |
用户获得的表权限 |
其他的字典视图中主要的是V$视图,之所以这样叫是因为他们都是以V$或GV$开头的。V$视图是基于X$虚拟视图的。V$视图是SYS用户所拥有的,在缺省状况下,只有SYS用户和拥有DBA系统权限的用户可以看到所有的视图,没有DBA权限的用户可以看到USER_和ALL_视图,但不能看到DBA_视图。与DBA_,ALL,和USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。
在大型系统上化几周时间手工输入每一条语句
手工输入带用户名变量的语句,然后再输入每一个用户名,这需要花好几个小时的时间
写一条SQL语句,生成需要的ALTER USER语句,然后执行他,这只需要几分钟时间
很明显我们将选择生成SQL的方法:
例:
SELECT 'ALTER USER'||username|| 'TEMPORARY TABLESPACE temp;' FROM DBA_USERS WHERE username<>'SYS' AND temporary_tablespace<>'TEMP'; |
这个查询的结果将被脱机处理到一个文件中,然后在执行:
ALTER USER SYSTEM TEMPORARY TABLESPACE temp; ALTER USER OUTLN TEMPORARY TABLESPACE temp; ALTER USER DBSNMP TEMPORARY TABLESPACE temp; ALTER USER SCOTT TEMPORARY TABLESPACE temp; ALTER USER DEMO TEMPORARY TABLESPACE temp; |
分享到:
相关推荐
北京火龙果软件工程技术中心 Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习...
本文将详细介绍Oracle数据库的对象管理、数据类型、触发器、索引和分区策略,以及备份与恢复的相关知识。 首先,关于Oracle数据库对象管理,主要包括创建和修改表结构、管理索引、维护表分区、创建和管理视图及序列...
程序执行功能的简单说明:在客户端的浏览器界面上输入一个客户端的文件名(本文以pdf类型文件为例),将该文件的全部内容做为一个大对象的数据存储在服务器端的Oracle数据库中。任何一个客户端都可以通过浏览器再次...
标题中的“Oracle数据库大对象数据存取的两种实现方法及时间性能比较”指的是在Oracle数据库中处理大对象(LOB)数据的两种不同方法,并对比它们的性能。Oracle数据库中的大对象数据通常指的是非结构化的数据,如...
1. **数据文件**(Data Files):数据文件是Oracle数据库存储实际数据的地方,包含了表、索引、视图等对象的数据。每个表空间由一个或多个数据文件组成,每个数据文件中包含一系列的数据块,这是Oracle数据存储的...
4. **数据对象分析**:`Oracle数据库数据对象分析(中).doc`和`Oracle数据库数据对象分析.doc`可能详细阐述了如何分析和理解Oracle中的表、视图、索引、存储过程等数据对象,以及如何优化查询性能。这在数据库设计...
在Oracle数据库中,undo指保留了数据变更前的状态,以便于恢复操作和多版本读取一致性。参数undo_management指明了undo管理的方式,AUTO表示数据库自动管理undo表空间。undo_retention参数定义了undo数据保留的时间...
Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它在企业级数据管理和应用程序开发中扮演着核心角色。本资源“Oracle数据库系统应用与开发”深入探讨了Oracle数据库的使用和开发技术,特别关注...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,用于存储、管理和检索复杂的数据。为了与Oracle数据库进行交互,我们需要可靠的连接工具。"Oracle数据库连接工具"指的是可以方便地连接到Oracle数据库并执行...
Oracle数据库的逻辑结构包括表空间、段、区和数据块,其中表空间是数据库中的一个逻辑存储单元,段是表空间中分配的逻辑存储区域,区是段中分配的一系列连续的数据块,数据块是Oracle数据库中最小的存储单位。...
- 提供了将哈希表中的数据自动插入到 Oracle 数据库的功能,这通常用于批量数据导入场景。 - **参数化查询** - 支持参数化 SQL 语句,从而增强安全性并减少 SQL 注入风险。 - **事务处理** - 实现了事务控制机制...
1. **Oracle数据库基础**:首先,你会了解到数据库的基本概念,如数据模型(层次、网络、关系)、关系数据库理论,以及Oracle数据库系统的特点和优势。此外,还会介绍Oracle数据库的安装、配置和初始化过程。 2. **...
综上所述,Oracle数据库数据字典是数据库管理和维护的关键工具,掌握如何有效地利用和查询数据字典对于任何Oracle DBA或开发者来说都是至关重要的。通过深入理解和实践,可以提升对数据库系统的掌控力,从而更好地...
这款名为"Golden32 v5.7.445"的工具就是专为查询Oracle数据库数据设计的轻量级应用。 Golden32是一款简洁易用的数据库管理工具,它允许用户通过简单的界面直接连接到本地或远程的Oracle数据库。这个工具的核心功能...
本话题聚焦于如何批量导入图片到Oracle数据库,这是一种常见的需求,特别是在处理大量图像数据的项目中。Oracle数据库作为一款强大的关系型数据库管理系统,支持多种类型的数据存储,包括BLOB(Binary Large Object...
这个压缩包包含了一些关键文件,帮助用户了解Oracle数据库的结构、数据操作以及用户管理。 1. **ot_data.sql**: 这个文件通常包含了示例数据库的初始数据。当你在新的Oracle环境中导入此脚本时,它会填充各种表和...
Oracle数据库比对工具是一款专为Oracle数据库设计的实用软件,由Delphi编程语言编写并提供源码,使得用户可以深入理解其工作原理并根据需要进行定制。在数据库管理、迁移、整合或性能优化等场景中,这样的工具能帮助...