【问题标题】:How import/export package body and spec into .sql or .pkb file如何将包体和规范导入/导出到 .sql 或 .pkb 文件中
【发布时间】:2020-01-05 16:27:12
【问题描述】:

我需要仅使用 sql plus 命令将包主体/规范导入/导出到 .sql 或 .pkb 文件中。

我尝试执行标准选择,但这只显示在控制台中,但我需要修改文件。

我还需要做相反的事情,即将一个 .sql/.pks/.pkb 文件导入数据库以应用更改。

【问题讨论】:

标签: sql oracle sqlplus


【解决方案1】:

如果您想使用 SQL*Plus 执行此操作,那么 - 正如您所知道的 - spool 似乎是一个自然选项。这是一个例子,看看它是否有帮助。

首先,我将创建一个简单的包:

SQL> create or replace package pkg_test as
  2    function f_today return date;
  3  end;
  4  /

Package created.

SQL> create or replace package body pkg_test as
  2    function f_today return date is
  3    begin
  4      return sysdate;
  5    end;
  6  end;
  7  /

Package body created.

SQL> select pkg_test.f_today from dual;

F_TODAY
-------------------
02.09.2019 22:28:56

SQL>

为了创建一个nice输出文件:

  • 应该设置一些 SQL*Plus 设置
  • 如果你想导出一个包,我们会查询user_source
  • 它不包含create (or replace)所以我会单独选择它
  • 终止斜线/也是如此

所有内容都将存储在.SQL 文件中。如果您直接运行这些命令,导出文件也将包含 select 语句,这是您要避免的。

Spool.sql文件:

set heading off
set feedback off
set pagesize 0
set termout off
set trimout on
set trimspool on
set recsep off
set linesize 120

spool pkg_test.sql

select 'create or replace' from dual;
select text from user_source
  where name = 'PKG_TEST'
    and type = 'PACKAGE'
order by line;
select '/' from dual;

select 'create or replace' from dual;
select text from user_source
  where name = 'PKG_TEST'
    and type = 'PACKAGE BODY'
order by line;
select '/' from dual;

spool off;

让我们运行它;由于所有这些SET 命令,您实际上什么都看不到; SQL> 提示将全部显示,就好像什么都没发生一样:

SQL> @spool
SQL>

但是,如果您检查 pkg_test.sql 文件中的内容,您会看到该包:

SQL> $type pkg_test.sql
create or replace
package pkg_test as
  function f_today return date;
end;
/
create or replace
package body pkg_test as
  function f_today return date is
  begin
    return sysdate;
  end;
end;
/

SQL>

看起来不错,所以 - 回答你的第二个问题(如何导入它回来) - 只需运行它。我将首先退出 SQL*Plus;否则 - 再次因为 SET 命令 - 你将看不到任何东西:

SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

C:\Users\lf>sqlplus scott/tiger

SQL*Plus: Release 11.2.0.2.0 Production on Pon Ruj 2 22:36:06 2019

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> @pkg_test

Package created.


Package body created.

SQL>

【讨论】:

  • 干得好。很好的详细解释。
【解决方案2】:

用于导出表格 exp <username>/<password> file=tables.dmp tables=(tab1,tab2)

用于导入表格 imp <username>/<password> file=tables.dmp tables=(tab1,tab2)

要在文件中打印屏幕输出,只需使用

spool <filename> 在所有将 sql 输出修改为报告的命令之前并在 sql 命令之后假脱机

 Spool file.txt
 SELECT * FROM TABLE
 SPOOL OFF

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 2011-03-17
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2016-09-18
    • 2022-12-16
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多