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

下面是“利用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日

相关文章

  • linux C编程常见的错误总结(必看篇)

    Linux C编程常见的错误总结(必看篇)攻略 前言 C语言是一门常用的编程语言,在Linux系统中也有大量的应用。然而,在编程过程中,常常会遇到各种各样的错误。本篇攻略汇总了Linux C编程中常见的错误,并提供了解决办法。 常见的错误 1. 错误提示:“undefined reference to `main’” 这个错误通常是由于编译器未能在程序中找到…

    database 2023年5月22日
    00
  • MySQL 5.7.13 源码编译安装配置方法图文教程

    下面详细讲解一下“MySQL 5.7.13 源码编译安装配置方法图文教程”的完整攻略。 环境准备 首先需要安装一些必要的工具包: $ sudo yum install -y cmake ncurses-devel bison gcc gcc-c++ 下载源码并解压 从官网 https://dev.mysql.com/downloads/mysql/ 下载 M…

    database 2023年5月22日
    00
  • SpringBoot中Mybatis + Druid 数据访问的详细过程

    下面是SpringBoot中Mybatis + Druid数据访问的详细步骤: 1. 添加依赖 在pom.xml文件中引入Mybatis和Druid的依赖,如下: <dependencies> <!– Mybatis依赖 –> <dependency> <groupId>org.mybatis.spring…

    database 2023年5月21日
    00
  • Linux系统下卸载自带Mysql、Apache、Php

    首先需要说明一下,在Linux系统中,卸载自带的Mysql、Apache、Php,你需要根据你所使用的操作系统和版本选择对应的安装组件,以下是在Ubuntu 18.04系统下卸载自带的Mysql、Apache、Php的完整攻略。 卸载Mysql 先检查你的系统中是否安装了Mysql 在终端输入以下命令检查你的系统中是否安装了Mysql: dpkg -l | …

    database 2023年5月22日
    00
  • Ubuntu 14.04安装java的方法以Ubuntu14.04为例

    Ubuntu 14.04安装java的方法以Ubuntu14.04为例 Java是一种跨平台的编程语言,广泛地运用于Web应用程序、企业管理系统等方面。在Ubuntu 14.04上安装Java会使得我们可以在系统中运行Java程序。本文将介绍如何在Ubuntu 14.04上安装Java. 安装openjdk Ubuntu 14.04默认使用的是OpenJDK…

    database 2023年5月22日
    00
  • Redis数据类型

    五大数据类型 string (动态字符串) hash (哈希表、压缩链表) list (双端链表、压缩链表) set (哈希表、整数集合) zset (跳表、压缩链表) 动态字符串 存储数字用int类型编码(8字节长整型)、存非数字小于39字节用embstr、大于39字节大于用raw编码。 struct sdsdr{ int len;// o(1)时间获取字…

    Redis 2023年4月12日
    00
  • linux redis 安装和密码设置

    1.下载redis   wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压   tar xzvf redis-4.0.8.tar.gz 3.安装   cd redis-4.0.8  进入redis目录   make 安装   cd src   make install PREFIX=/…

    Redis 2023年4月11日
    00
  • SQL SERVER性能优化综述(很好的总结,不要错过哦)第1/3页

    我很乐意为你提供有关“SQL SERVER性能优化综述”的完整攻略。下面,我将按照以下步骤进行讲解: 1.简介:介绍为什么要进行SQL SERVER性能优化,以及提升SQL SERVER性能的好处。 2.诊断:讲解如何诊断SQL SERVER性能瓶颈,具体包括SQL SERVER性能诊断工具,如何分析性能日志等。 3.优化:讲解如何进行SQL SERVER性…

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