存储过程管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle的存储过程被存放在数据库中,在这种情况下,使用传统工具管理它们就变得很困难。但是,如果你知道在哪找到它们那么就可以容易的管理它们。
在管理存储进程中,最重要的DBA视图是:
·DBA_OBJECTS
·DBA_SOURCE
·DBA_ERRORS
在这篇文章中,我们将着重介绍DBA_OBJECTS视图。它存储了关于PACKGE,PACKGE BODY,PROCEDURE, FUNCTION, TRIGGER, JAVA CLASS, JAVA RESOURCE, 和 JAVA DATA以及其他的信息。DBA_OBJECTS中的STATUS指出了对象在上次编译的时候是否出现了错误。它将被设置成‘VALID’或者‘INVALID’。
在数据库中使用这个代码列出所有有错误或者由于被修改需要再编译的对象。
select owner,object_name,object_type from dba_objects where status = 'INVALID';
一个包可能会变得无效,因为它的引用有可能被再编译。你可以利用SQL DDL语句在没有源代码的情况下重新编译一个包:
alter function FOO compile;
alter java source FOO compile;
alter java class FOO compile;
alter procedure FOO compile;
alter package FOO compile;
alter package FOO compile body;
alter trigger FOO compile body;
和每个对象相关的有三个时间戳。CREATED的时间戳是对象首次被创建的时候。时间戳这一栏是在对象上次被说明的时候制定的。LAST_DDL_TIME是DDL语句上次被执行的时间。
你可以写SQL*Plus脚本,它可以帮组你扫描非法的脚本并尝试重新编译它们:
set feedback off
set heading off
set linesize 1000
set pagesize 0
set pause off
set trimspool on
set verify off
spool tmp.sql;
select 'alter '||object_type||' '||owner||'.'||object_name||' compile;'
from dba_objects
where status = 'INVALID'
and object_type in ('FUNCTION','JAVA SOURCE','JAVA CLASS','PROCEDURE','PACKAGE','TRIGGER');
select 'alter package '||owner||'.'||object_name||' compile body;'
from dba_objects
where status = 'INVALID'
and object_type = 'PACKAGE BODY';
spool off;
@tmp
当你运行的时候,这个脚本将会创建第二个脚本,这个脚本叫做Tmp.sql。它发布所有的ALTER命令然后运行这个脚本。