本帖最后由 芳林野草 于 2014-3-2 16:52 编辑
既然大家对该主题如此感兴趣,我再补充一些内容
Oracle 版本7新增SQL命令
版本7引入了众多新概念及相关SQL命令,包括过程化SQL、触发器、安全管理、对象管理、系统控制等一共30个新命令。
为了更好地理解新命令,我们先了解Oracle版本7引入的若干基本概念(概念后面会给出Oracle对此概念的定义,供大家参考)。
过程化SQL(PL/SQL)
过程化SQL是Oracle对SQL进行扩展的结果,可以包含SQL语句,也可以包含过程控制结构(顺序、分支以及循环结构)。过程、函数以及包都是PL/SQL的程序单元。
PL/SQL is Oracle’s procedural language extension to SQL. PL/SQL allowsyou to mix SQL statements with procedural constructs. PL/SQL provides thecapability to define and execute PL/SQL program units such as procedures,functions, and packages.
存储过程与函数(stored procedure and function)
存储过程和函数组合了SQL和PL/SQL编程语言的语句以完成特定任务,它们都是模式对象。存储过程和函数非常相似,但并不相同。函数会给调用者返回一个返回值,但存储过程不会。
A procedure or function is a schema object that logically groups a setof SQL and other PL/SQL programming language statements together to perform aspecific task.
Procedures and functions are nearly identical. The only differences are thatfunctions always return a single value to the caller, while procedures do not.
包(package)
包是相关存储过程和函数的组合,同时也包括这些存储过程和函数使用的游标及公共变量。
我相信绝大部分人都使用过Oracle内部一个名叫dbms_metadata的包,这个包有一个成员函数叫get_ddl,用于获取对象的定义。
下面这个语句使用该函数获取存储过程P_DELETE_OLD_PART_TBS的具体内容:
selectdbms_metadata.get_ddl( 'PROCEDURE', 'P_DELETE_OLD_PART_TBS', 'WOW_DATA' ) from dual;
A package is a group of related procedures and functions, together withthe cursors and variables they use, stored together in the database forcontinued use as a unit.
触发器(trigger)
触发器和存储过程很类似,其主体本质上都是PL/SQL程序单元。触发器的作用是当表的记录发生增删改操作时,隐式执行一些预定义的操作。
Oracle allows you to define procedures that are implicitly executed whenan INSERT, UPDATE, or DELETE statement is issued against the associated table.These procedures are called database triggers. Triggers are similar to storedprocedures.
概要文件(profile)
概要文件是资源限制的集合。当我们把一个概要文件关联到用户之后,这个用户创建的会话可使用的资源(比如对CPU的使用份额)就受到了约束和限制。
需注意的是,概要文件一开始仅包含对资源的限制,后续版本才增加了对密码管理的规则。
A profile is a named set of resource limits that you can assign to auser. You manage resource limits with user profiles.
角色(role)
角色是相关权限的集合,其主要目的是简化权限的管理。
想象一个场景:我们的数据库中有20个终端用户,有300个表。现在要将其中280个表的读权限赋予其中18个用户,该怎么做?
从数据库内部看,我们可维护一个权限分配表,而这个表将包含280*18=5040条数据,是不是很繁琐?如果定义一个角色,将280个表的读权限赋予该角色,然后将该角色赋给18个用户,那么我们要保存的权限配置数据只有280+18=298条,约为原来的6%!这就是角色存在的意义。
Roles are named groups of related privileges that you grant to users orother roles. Roles are designed to ease the administration of end–user systemand object privileges.
However, roles are not meant to be used for application developers,because the privileges to access objects within stored programmatic constructsneed to be granted directly.
模式(schema)
很多人会把模式和用户混为一谈,因为他们总是成对出现,并且一一对应。但本质上,模式是数据逻辑结构的集合,或者说是模式对象的集合。那么什么是模式对象呢?表、索引、视图、存储过程、序列等都是。
既然用户和模式不同,那么用户又是什么?用户是Oracle实现权限管理的基础,是人和数据库交互的桥梁。没有用户,我们无法登录数据库,也无法做任何操作。因此,用户侧重于安全管理,而模式侧重于业务或者说数据本身,二者是不同的。
A schema is a collection of logical structures of data, or schemaobjects. A schema is owned by a database user and has the same name as that user.Each user owns a single schema.
用户(user)
前面在介绍模式的时候已经提到,用户是连接数据库系统使用人员和数据库本身的桥梁,通过用户可实现不同的人做不同的操作。
确切地讲,这里的user应该理解为账号,即account。用户一般指的是人,account则是人通过它来与系统(软件)进行交互的渠道,或称桥梁。
A user (sometimes called a username) is a name defined in the databasethat can connect to and access objects in database schemas.
补充几点对于命令功能的说明。
对于一开始就使用Oracle 10g、11g的人来说,可能使用过针对数据库本身的触发器,比如当用户登录数据库的时候,做某些特定的操作。但是你可能不知道,CREATE TRIGGER命令在Oracle版本7刚出现的时候,并没有这个特性。所有的触发器只是针对表,不针对数据库,也不针对视图。
其实很多功能选项,都是Oracle在各个版本陆陆续续添加进来的。很多特性可能我们一辈子都不会去用,因为特定的功能都是针对特定的场景而设计,如果没有必要,就不要乱用,否则后续维护成本会上升,简单为上。
还想提一点,Oracle有时候很搞笑。 看到那个CREATE SCHEMA命令了吗?猜猜它是什么意思?你可能会直观地认为它要创建一个schema,但根本不是这样!这个命令的格式如下:
是不是有点无语?这个命令并不是要创建什么schema,而是要设置一个还原点,之后执行一系列的建表、建视图和赋权语句。这个问题背后的原因是,DDL命令会隐式提交事务,也就是说,各个DDL之间是独立的事务。那么如何做到像插入数据那样创建表和视图呢?要么所有表和视图都创建起来,要么所有的都不要创建。CREATE SCHEMA就是为此而设计的。
未完待续 。。。。。。
|