您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 三级辅导 >> 正文    
  使用动态SQL克隆数据库对象 【注册男护士专用博客】          

使用动态SQL克隆数据库对象

www.nanhushi.com     佚名   不详 

首先给出一个警告:下面的技巧提示如果使用不小心会造成严重的安全漏洞。当你在一个非测试环境下使用这种方法之前,一定要完完全全地理解这样做的后果。

如果你需要复制一个表并在(另一个用户名下的)另一个方案(schema)制作它的一个副本,那么你可以使用 sql*plus 的 copy 命令,或者使用简单的语句“create table foo as select * from other.foo;”,只要你在另一个用户的表上有足够的 select 权限。

然而,如果你需要对任何其它数据库对象做同样的事情,比如包、过程、函数或视图,就没有这么简单的命令了。你需要手工找出其代码并在新实例中运行它。如果能够简单“克隆对象”并让另一个用户的对象出现在自己的实例中,那将是一件非常值得高兴的事。对于为开发过程创建测试方案来说,这一点非常有用。在这个例子中,我将创建一个包,使用该包可以对大多数对象进行克隆(具有一些限制)。

要处理的主要问题是获得源代码。对象所有者通过视图user_source 可以访问源代码。而对于其它用户,如果对象被授予了execute 权限给一个用户,那么这个用户就只能看到通过视图all_source 选出的源代码。我们可以通过一个过程来封装“give me the source for your object(给我你的对象的源代码)”请求:

create or replace procedure get_source
(
    p_type          varchar2,
    p_name          varchar2,
    p_cursor out    sys_refcursor
)
as
begin
    open p_cursor for
        select text from user_source
         where type = upper(p_type) and name = p_name
          order by line;
end get_source;
/
show errors;

注意,我没有用“upper(name)”。这就意味着你必须匹配这个存储过程的字母大小写。java 存储过程使用很多大小写混合的名字。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    2011年护士资格考试:考…
    2009年初级护士资格考试…
    2009年主管护师考试于12…
    2009年初级护士考试于12…
    2009年初级护师考试于12…
    石家庄市关于2009年度护…
    2009年护士专业技术资格…
    医护技能考试周末举行 4…
    护士“托福”今年7月开考
    护士“托福”考试开始报…
    专 题 栏 目