快捷搜索:  汽车  科技

oracle数据库中如何进行推送(Oracle应用迁移到AnalyticDBforPostgreSQL指导)

oracle数据库中如何进行推送(Oracle应用迁移到AnalyticDBforPostgreSQL指导)例如:对于oracle的procedure和function,不论是package的还是全局的,都转换成adb for pg 的function。例如:create or replace package pkg is … end; 可以转换成:create schema pkg; Package定义的变量 procedure/function的局部变量保持不变,全局变量在ADB for PG中可以使用临时表进行保存。详见1.4.5节。 Package初始化块如果可以删掉,就删掉,删不掉的话,可以使用function封装,在需要的时候主动调用该function。 Package 内定义的procedure/functionPackage 内定义的procedure和function 转成adb for pg的function,并把function 定义到package对应的schema内。

AnalyticDB for PostgreSQL(简称:ADB for PG)对Oracle语法有着较好的兼容,本文介绍如何将Oracle应用迁移到AnalyticDB for PostgreSQL。

1 PL/SQL

PL/SQL(Procedural Language/SQL)是一种过程化的SQL语言,是Oracle对SQL语句的拓展,使得SQL的使用可以具有一般编程语言的特点,因此,可以用来实现复杂的业务逻辑。PL/SQL对应了ADB for PG中的PL/PGSQL

1.1Package

ADB for PG的plpgsql不支持package,需要把package 转换成 schema,并package里面的所有procedure和 function转换成ADB for PG的function。

例如:

create or replace package pkg is … end;

可以转换成:

create schema pkg;

  1. Package定义的变量

procedure/function的局部变量保持不变,全局变量在ADB for PG中可以使用临时表进行保存。详见1.4.5节。

  1. Package初始化块

如果可以删掉,就删掉,删不掉的话,可以使用function封装,在需要的时候主动调用该function。

  1. Package 内定义的procedure/function

Package 内定义的procedure和function 转成adb for pg的function,并把function 定义到package对应的schema内。 例如,有一个Package名为pkg中有如下函数: FUNCTION test_func (args int) RETURN int is var number := 10; BEGIN … … END; 转换成如下ADB for PG的function: CREATE OR REPLACE FUNCTION pkg. test_func(args int) RETURNS int AS $$ … … $$ LANGUAGE plpgsql;

1.2 Procedure/function

对于oracle的procedure和function,不论是package的还是全局的,都转换成adb for pg 的function。

例如:

CREATE OR REPLACE FUNCTION test_func (v_name varchar2 v_version varchar2) RETURN varchar2 IS ret varchar(32); BEGIN IF v_version IS NULL THEN ret := v_name; ELSE ret := v_name || '/' || v_version; END IF; RETURN ret; END;

转化成:

CREATE OR REPLACE FUNCTION test_func (v_name varchar v_version varchar) RETURNS varchar AS $$ DECLARE ret varchar(32); BEGIN IF v_version IS NULL THEN ret := v_name; ELSE ret := v_name || '/' || v_version; END IF; RETURN ret; END; $$ LANGUAGE plpgsql;

Procedure/function转换的关键点:

  1. RETURN 关键字转成RETURNS
  2. 函数体使用$\$ ... $\$封装起来
  3. 函数语言声明
  4. Subprocedure需要转换成ADB for PG的function

1.3 PL statement

1.3.1 For语句

带有REVERSE的整数FOR循环的工作方式不同:PL/SQL中是从第二个数向第一个数倒数,而PL/pgSQL是从第一个数向第二个数倒数,因此在移植时需要交换循环边界。

3 数据类型转换对照表

oracle数据库中如何进行推送(Oracle应用迁移到AnalyticDBforPostgreSQL指导)(1)

oracle数据库中如何进行推送(Oracle应用迁移到AnalyticDBforPostgreSQL指导)(2)

作者:陆封

猜您喜欢: