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

时间:2019-05-16 00:42:53

标签: oracle

我在通过命令行从其他用户(未连接的用户)导出或导入包(包括主体)时遇到问题。解决此问题的最佳方法是什么。 我可以通过Oracle SQL Developer在“其他”用户软件包中查看该软件包。但是我想在命令行中执行此操作。

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

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

以上将仅从当前用户获取软件包,而不从其他用户获取软件包。

2 个答案:

答案 0 :(得分:1)

使用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:\temp\TEST.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;
/

答案 1 :(得分:0)

您在查询中使用USER_SOURCE视图,请改用ALL_SOURCE或DBA_SOURCE。这些视图有一个OWNER列。您可以在查询的过滤器中使用它。