Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 定义对象的代码可以从user_source数据字典中找到

//在Oracle中,我们可以从数据字典user_source(视图)中查看对象定义代码;  
//我们先来看user_source视图的结构:  
desc user_source;  
Name Type           Nullable Default Comments                                                              
---- -------------- -------- ------- --------------------------------------------------------------------  
NAME VARCHAR2(30)   Y                Name of the object                                                    
TYPE VARCHAR2(12)   Y                Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",  
                                                         "PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"   
LINE NUMBER         Y                Line number of this line of source                               
TEXT VARCHAR2(4000) Y                Source text    
//  
//下面的代码是user_source视图的定义代码:  
CREATE OR REPLACE FORCE VIEW "SYS"."USER_SOURCE" ("NAME", "TYPE", "LINE", "TEXT") AS  
select o.name,  
       decode(o.type#,   
              7, "PROCEDURE",   
              8, "FUNCTION",   
              9, "PACKAGE",  
              11, "PACKAGE BODY",   
              12, "TRIGGER",   
              13, "TYPE",   
              14, "TYPE BODY",  
              "UNDEFINED"),  
       s.line,   
       s.source  
from sys.obj$ o,   
     sys.source$ s  
where o.obj# = s.obj#   
  and ( o.type# in (7, 8, 9, 11, 12, 14) OR  
                   ( o.type# = 13 AND o.subname is null))  
  and o.owner# = userenv("SCHEMAID")  
union all  
select o.name,   
       "JAVA SOURCE",   
       s.joxftlno,   
       s.joxftsrc  
from sys.obj$ o,   
     x$joxfs s  
where o.obj# = s.joxftobn  
  and o.type# = 28  
  and o.owner# = userenv("SCHEMAID");  
//  
//下面是我先定义好的一个procedure:show_employee,  
//现在我们来看其定义代码,注意,传递的参数要大写:  
set linesize 1000;  
set pagesize 1000;  
set long 10000;  
select type,line||" "||text  
from user_source  
where name="SHOW_EMPLOYEE";  
//  
TYPE         LINE||""||TEXT  
------------ -----------------------------------------------------------------------------------------  
PROCEDURE    1 procedure show_employee(empno_in in emp.empno%type)  
PROCEDURE    2 as 
PROCEDURE    3    v_sign number;  
PROCEDURE    4    v_empno emp.empno%type;  
PROCEDURE    5    v_ename emp.ename%type;  
PROCEDURE    6    v_deptno emp.deptno%type;  
PROCEDURE    7 begin  
PROCEDURE    8    select 1 into v_sign  
PROCEDURE    9    from dual  
PROCEDURE    10    where exists(select count(*) from emp where empno=empno_in);  
PROCEDURE    11    if v_sign=1 then  
PROCEDURE    12       select empno,ename,deptno into v_empno,v_ename,v_deptno  
PROCEDURE    13       from emp where empno=empno_in;  
PROCEDURE    14       dbms_output.put_line("information of"||empno_in||" are:");  
PROCEDURE    15       dbms_output.put_line("empno:"||v_empno||",ename:"||v_ename||",deptno:"||v_deptno);  
PROCEDURE    16    end if;  
PROCEDURE    17    exception  
PROCEDURE    18             when others then  
PROCEDURE    19             dbms_output.put_line("no data found");  
PROCEDURE    20 end show_employee;  
PROCEDURE    21  
PROCEDURE    22  
//  
//我们来执行一下show_employee这个存储过程:  
exec show_employee("7788");  
information of7788 are:  
empno:7788,ename:SCOTT,deptno:20  
PL/SQL procedure successfully completed  Oracle 分区和面向对象数据库系统的学习Oracle 谨慎授予用户dba权限相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (2)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款