利用PL/SQL从Oracle数据库导出和导入数据

yizhihongxing

下面是“利用PL/SQL从Oracle数据库导出和导入数据”的完整攻略。

1. PL/SQL的介绍

PL/SQL是面向对象的程序设计语言,用于与Oracle数据库进行交互。PL/SQL具有结构化编程的能力,可以编写存储过程和触发器等程序对象。

2. 导出数据的基本步骤

导出数据是从数据库中把数据取出来并保存到本地文件中。PL/SQL提供了dbms_datapump这个包来实现数据的导出和导入。

下面是导出数据的基本步骤:

(1)连接到Oracle数据库,并打开PL/SQL开发工具,例如SQL Developer。

(2)运行以下代码创建一个数据泵作业:

DECLARE
  dp_handle  NUMBER;
BEGIN
  dp_handle := DBMS_DATAPUMP.OPEN(operation => 'EXPORT', job_mode => 'FULL', job_name => 'EXPORT_JOB', version => 'COMPATIBLE');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT.LOG', 'LOG');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT.DMP', 'DMP');
  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''SCHEMA_NAME'')');
  DBMS_DATAPUMP.DATA_FILTER(dp_handle, 'INCLUDE', 'TABLE', 'IN (''TABLE_NAME'')');
  DBMS_DATAPUMP.START_JOB(dp_handle);
  DBMS_DATAPUMP.WAIT_FOR_JOB(dp_handle);
  DBMS_DATAPUMP.DETACH(dp_handle);
END;
/

其中,SCHEMA_NAME和TABLE_NAME需要替换为实际的模式名称和表名称。

执行该代码可以创建一个名称为EXPORT_JOB的导出作业,并将导出数据保存到EXPORT.DMP文件中。

3. 导入数据的基本步骤

导入数据是把之前导出的数据文件中的数据重新插入到数据库中。导入数据的步骤也可以使用dbms_datapump这个包来实现。

下面是导入数据的基本步骤:

(1)连接到Oracle数据库,并打开PL/SQL开发工具,例如SQL Developer。

(2)运行以下代码创建一个数据泵作业:

DECLARE
  dp_handle  NUMBER;
BEGIN
  dp_handle := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'FULL', job_name => 'IMPORT_JOB', version => 'COMPATIBLE');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'IMPORT.LOG', 'LOG');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT.DMP', 'DMP');
  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''SCHEMA_NAME'')');
  DBMS_DATAPUMP.DATA_FILTER(dp_handle, 'INCLUDE', 'TABLE', 'IN (''TABLE_NAME'')');
  DBMS_DATAPUMP.START_JOB(dp_handle);
  DBMS_DATAPUMP.WAIT_FOR_JOB(dp_handle);
  DBMS_DATAPUMP.DETACH(dp_handle);
END;
/

其中,SCHEMA_NAME和TABLE_NAME需要替换为实际的模式名称和表名称。需要注意的是,导入数据之前需要确保数据库中不存在相同的表。

执行该代码可以创建一个名称为IMPORT_JOB的导入作业,并从EXPORT.DMP文件中读取数据重新插入到数据库中。

4. 示例

假设有一个名为TEST的模式,其中包含一个名为EMP的表,我们需要导出该表的数据并保存到本地文件中,然后重新导入数据到另一个数据库中。下面给出两个示例说明。

示例1

导出数据:

DECLARE
  dp_handle  NUMBER;
BEGIN
  dp_handle := DBMS_DATAPUMP.OPEN(operation => 'EXPORT', job_mode => 'FULL', job_name => 'EXPORT_EMP', version => 'COMPATIBLE');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT_EMP.LOG', 'LOG');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT_EMP.DMP', 'DMP');
  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''TEST'')');
  DBMS_DATAPUMP.DATA_FILTER(dp_handle, 'INCLUDE', 'TABLE', 'IN (''EMP'')');
  DBMS_DATAPUMP.START_JOB(dp_handle);
  DBMS_DATAPUMP.WAIT_FOR_JOB(dp_handle);
  DBMS_DATAPUMP.DETACH(dp_handle);
END;
/

执行该代码将导出TEST模式下的EMP表,并保存到EXPORT_EMP.DMP文件中。

导入数据:

DECLARE
  dp_handle  NUMBER;
BEGIN
  dp_handle := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'FULL', job_name => 'IMPORT_EMP', version => 'COMPATIBLE');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'IMPORT_EMP.LOG', 'LOG');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT_EMP.DMP', 'DMP');
  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''TEST'')');
  DBMS_DATAPUMP.DATA_FILTER(dp_handle, 'INCLUDE', 'TABLE', 'IN (''EMP'')');
  DBMS_DATAPUMP.START_JOB(dp_handle);
  DBMS_DATAPUMP.WAIT_FOR_JOB(dp_handle);
  DBMS_DATAPUMP.DETACH(dp_handle);
END;
/

执行该代码将从EXPORT_EMP.DMP文件中读取数据,并重新插入到数据库中。

示例2

假设现在需要把从EMP表中删除工资小于3000的记录,同时需要备份删除前的数据。具体步骤如下:

(1)备份数据

DECLARE
  dp_handle  NUMBER;
BEGIN
  dp_handle := DBMS_DATAPUMP.OPEN(operation => 'EXPORT', job_mode => 'FULL', job_name => 'EXPORT_EMP', version => 'COMPATIBLE');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT_EMP_BEFORE_DELETE.LOG', 'LOG');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT_EMP_BEFORE_DELETE.DMP', 'DMP');
  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''TEST'')');
  DBMS_DATAPUMP.DATA_FILTER(dp_handle, 'INCLUDE', 'TABLE', 'IN (''EMP'')', 'QUERY_EXPR', 'WHERE SALARY < 3000');
  DBMS_DATAPUMP.START_JOB(dp_handle);
  DBMS_DATAPUMP.WAIT_FOR_JOB(dp_handle);
  DBMS_DATAPUMP.DETACH(dp_handle);
END;
/

执行该代码将导出工资小于3000的EMP表数据,并保存到EXPORT_EMP_BEFORE_DELETE.DMP文件中。

(2)删除数据

DELETE FROM TEST.EMP WHERE SALARY < 3000;
COMMIT;

执行该代码可以删除工资小于3000的EMP表记录,并进行数据库事务提交。

(3)重新导入数据

DECLARE
  dp_handle  NUMBER;
BEGIN
  dp_handle := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'FULL', job_name => 'IMPORT_EMP', version => 'COMPATIBLE');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'IMPORT_EMP.LOG', 'LOG');
  DBMS_DATAPUMP.ADD_FILE(dp_handle, 'EXPORT_EMP_BEFORE_DELETE.DMP', 'DMP');
  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''TEST'')');
  DBMS_DATAPUMP.DATA_FILTER(dp_handle, 'INCLUDE', 'TABLE', 'IN (''EMP'')');
  DBMS_DATAPUMP.START_JOB(dp_handle);
  DBMS_DATAPUMP.WAIT_FOR_JOB(dp_handle);
  DBMS_DATAPUMP.DETACH(dp_handle);
END;
/

执行该代码将从EXPORT_EMP_BEFORE_DELETE.DMP文件中读取数据,并重新插入到数据库中。

5. 结论

本文详细讲解了如何利用PL/SQL从Oracle数据库导出和导入数据,并给出了两个实际示例。通过这些示例,我们了解了PL/SQL的基本使用方法,并且掌握了如何使用PL/SQL来进行数据备份和恢复的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用PL/SQL从Oracle数据库导出和导入数据 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • SpringBoot项目集成Flyway详细过程

    SpringBoot项目集成Flyway的完整过程如下: 1. 添加依赖 需要在pom.xml文件中添加Flyway的依赖: <dependencies> <!– spring boot starter –> <dependency> <groupId>org.springframework.boot&lt…

    database 2023年5月21日
    00
  • Linux怎么添加mysql系统环境变量

    这篇文章主要讲解了“Linux怎么添加mysql系统环境变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux怎么添加mysql系统环境变量”吧! Linux添加mysql系统环境变量 昨天安装完mysql后,直接在export PATH上面一行,增加了export PATH=/usr/local/my…

    MySQL 2023年4月8日
    00
  • Mysql命令大全(详细篇)

    Mysql命令大全(详细篇) 概述 MySQL是一个开源关系型数据库管理系统,常用于构建Web应用程序,并且是LAMP(Linux、Apache、MySQL、PHP/Python/Perl)技术栈中必不可少的组件之一。 随着MySQL数据库使用的普及,我们需要了解MySQL的基本操作,本篇文章将介绍MySQL的命令行操作。 安装MySQL 如果您还未安装My…

    database 2023年5月21日
    00
  • Mysql深入了解联表查询的特点

    Mysql联表查询是指查询不止一个表格并将它们联接起来的查询。本文将为您介绍Mysql深入了解联表查询的特点。 联表查询的语法 在Mysql中,进行联表查询的语法如下: SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name = table2.column_name WHERE …

    database 2023年5月22日
    00
  • php循环输出数据库内容的代码

    首先我们来讲解如何使用PHP循环输出数据库内容的代码。 准备工作 在开始编写代码之前,我们需要准备好以下事项: 一台安装了PHP和MySQL的Web服务器。 一个数据库,里面包含我们要输出的数据表。 一个用于连接数据库的PHP文件,例如 config.php。 连接数据库 在开始循环输出数据库内容之前,我们需要先连接数据库。可以使用如下代码来连接数据库: &…

    database 2023年5月21日
    00
  • 总结一周内学习的Sql经验(一)

    我来为您详细讲解“总结一周内学习的Sql经验(一)”的完整攻略。 1. 学习资料 首先,学习Sql的基本资料可以在网上轻易获得。其中,最基础的学习材料是 W3School SQL入门,它涵盖了 SQL 语法、表设计、数据库设计、SQL 查询语法等基础内容。此外,还可以通过MOOC平台,例如 Coursera 和 edX 等学习大牌大学的数据库课程。通过这些课…

    database 2023年5月19日
    00
  • MySQL 数据库中数据表超详细的基本操作

    以下是针对MySQL数据库中数据表的超详细基本操作攻略: 操作一:创建数据表 要创建一个数据表,你需要先确定数据表的名称以及各列的名称和数据类型。以下是创建一个名为“users”的数据表的示例代码: CREATE TABLE users ( id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT…

    database 2023年5月19日
    00
  • mysql 常用命令集锦[绝对精华]

    MySQL 常用命令集锦 1. 登录 MySQL 要使用 MySQL 命令行客户端,必须先登录到服务器上的 MySQL 服务。 使用以下命令登录到 MySQL: mysql -h 主机名 -u 用户名 -p 其中: -h:指定主机名,如果是本机 MySQL 服务,可以省略。 -u:指定连接 MySQL 的用户名。 -p:表示 MySQL 用户需要输入密码来进…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部