过程和函数
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 包
创建包规范的语法如下: 下表列出了用户可以利用的触发器事件: 事件触发器描述 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 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; |
|