从其他用户导出或导入软件包



我正在从其他用户(未连接到(通过命令行的其他用户(未连接到的用户(导出或导入问题。解决此问题的最佳方法是什么。我可以在其他用户软件包中通过Oracle SQL开发人员查看软件包。但是我想在命令行中执行此操作。

到目前为止,我尝试导出软件包,我尝试使用以下命令,不幸的是,这不是其他用户的导出软件包。

SET HEAD OFF
SET ECHO OFF
SET FEED OFF
SET TERM OFF
SET LINE 1500
SET NEWPAGE NONE
set pagesize 0
SPOOL C:appexportTEST.SQL
PROMPT CREATE OR REPLACE
select trim(text) from user_source
where name='USR_RUNNER' AND type='PACKAGE';
SPOOL OFF

上面只能从当前用户而不是其他用户获取软件包。

使用ALL_OBJECTS而不是USER_SOURCE查看用户可以访问的所有模式的结果。您可能还想使用DBMS_METADATA.GET_DDL,而不是尝试使用数据字典创建DDL。重新创建对象可能非常困难,DBMS_METADATA是确保正确捕获对象的最佳方法。

SET HEAD OFF
SET ECHO OFF
SET FEED OFF
SET TERM OFF
SET LINE 1500
SET NEWPAGE NONE
set pagesize 0
SET LONG 999999999
SPOOL C:tempTEST.SQL
select dbms_metadata.get_ddl('PACKAGE', object_name, owner) ddl
from all_objects
where owner = 'SOME_USERNAME'
    and object_type = 'PACKAGE'
order by owner, object_name;
SPOOL OFF

如果要在没有架构名称的情况下导出代码,则在会话中运行以下PL/SQL块。这将使您可以将脚本导入其他用户。

begin
    dbms_metadata.set_transform_param
    (
        dbms_metadata.session_transform, 'EMIT_SCHEMA', false
    );
end;
/

您在查询中使用user_source视图,而是使用all_source或dba_source。这些视图有一个所有者列。您可以在查询的过滤器中使用它。

最新更新