---
title: PL/SQL迁移
description: "接下来对自定义类型、存储过程、函数、触发器进行迁移，可以使用达梦DTS工具进行迁移，如果遇到大量错误难以排查，也可以使用如下的方法进行分步迁移。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/JointSolution/oracle-migration/kunpengoralcemigs_01_0015.html
sourcePath: /source/zh/kunpengdbs/JointSolution/oracle-migration/kunpengoralcemigs_01_0015.html
indexId: a210d345586272c00a270c959050c4d2b12a0cf39c50cc147862ef3c44b448b583
---
# PL/SQL迁移

接下来对自定义类型、存储过程、函数、触发器进行迁移，可以使用达梦DTS工具进行迁移，如果遇到大量错误难以排查，也可以使用如下的方法进行分步迁移。

#### 一、导出待迁移对象的脚本

方法1：

使用PL/SQL DEVELOPER等工具导出自定义类型、存储过程、函数、触发器等PL/SQL脚本。

在PL/SQL工具->导出用户对象，可以看到对象名称和类型，可以分类导出到多个文件并整理，以便排查问题。

方法2：

在sqlplus中使用Oracle自带的包导出。

- 导出某个SCHEMA的全部触发器
  1 2 3 4 5 6 7 set pagesize 0 set long 90000 set feedback off set echo off spool triggers.sql select DBMS_METADATA.GET_DDL('TRIGGER',u.object_name,'DMHS') from all_objects u where owner='DMHS' and object_type = 'TRIGGER'; spool off;

- 导出存储过程
  1 2 3 4 5 6 7 set pagesize 0 set long 90000 set feedback off set echo off spool procedures.sql select DBMS_METADATA.GET_DDL('PROCEDURE',u.object_name,'DMHS') from all_objects u where owner='DMHS' and object_type = ' PROCEDURE'; spool off;

- 导出自定义函数
  1 2 3 4 5 6 7 set pagesize 0 set long 90000 set feedback off set echo off spool functions.sql select DBMS_METADATA.GET_DDL('FUNCTION',u.object_name,'DMHS') from all_objects u where owner='DMHS' and object_type = ' FUNCTION '; spool off;


同理，其他类型如TYPE, PACKAGE，PACKAGEBODY等也可以用这种方法导出Oracle的作业。

由于和达梦机制不同，需要了解具体意义后在达梦的 代理 中重新配置，可以在最后进行该部分的迁移：

使用管理工具登录，选择“代理 > 创建代理环境 > 作业 > 新建作业”，根据需求配置作业步骤和作业调度即可。


#### 二、运行脚本并处理错误

根据依赖顺序在达梦中执行并分析错误。

错误的包或类名：


1. 检查是否依赖的包或类未创建。
2. 如果使用Oracle系统包可以在达梦中使用SP_CREATE_SYSTEM_PACKAGES(1)语句创建。

3. 如果创建后也没有，需要根据具体情况改写，如dbms_output.put_line在达梦中可以使用PRINT代替。


无效的方法名：


1. 检查是否依赖的方法未创建。
2. 如果使用Oracle系统方法可以在达梦中使用SP_CREATE_SYSTEM_PACKAGES(1)语句创建。
3. 如果创建后也没有，需要根据具体情况改写。

非法的基类名：


需要注意达梦和Oracle部分数据类型的精度和意义是不一样的，需要进行改写：

| Oracle | DM |
| --- | --- |
| LONG | TEXT |
| DATE | TIMESTAMP |
| NVARCHAR2 | VARCHAR2（最新版本可以兼容NVARCHAR2） |
| LONG RAW | VARBINARY |


语法分析错误：


1. 由于使用达梦的保留字冲突导致，建议如果可以更换尽量更换，如果不行可以采用屏蔽关键字的方法进行屏蔽。
2. 字符兼容问题，是否使用了中文的标点符号。
3. Oracle和DM有语法不一致的地方，需要根据具体问题具体分析，例如：| Oracle | DM |
| --- | --- |
| Select "DUMMY" From dual | Select "ID" From dual |
| to\_nchar | to\_char |
| NLS\_UPPER | NLS\_UPPER |
