选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

在 Aurora Postgre 中处理动态SQL语句中的匿名块 SQL - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Aurora Postgre 中处理动态SQL语句中的匿名块 SQL

由 anuradha chintha 创作 () AWS

摘要

此模式向您展示了如何避免在处理 Dynamic SQL 语句中的匿名块时出现的错误。当你使用 Schema Conversion Tool 将 Oracle AWS 数据库转换为 Aurora Postgre SQL 兼容版数据库时,你会收到一条错误消息。为避免错误,必须知道OUT绑定变量的值,但是要等到运行该SQL语句之后才能知道OUT绑定变量的值。该错误是由于 AWS Schema Conversion Tool (AWSSCT) 不理解动态SQL语句中的逻辑造成的。 AWSSCT无法转换 PL/ SQL 代码(即函数、过程和包)中的动态SQL语句。

先决条件和限制

先决条件

架构

源技术堆栈

  • 本地 Oracle 数据库 10g 及更高版本

目标技术堆栈

  • 亚马逊 Aurora Postgre SQL

  • 适用于 Post RDS gre 的亚马逊 SQL

  • AWSSchema Conversion Tool (AWSSCT)

迁移架构

下图显示了如何使用AWSSCT和 Oracle OUT 绑定变量来扫描应用程序代码中是否存在嵌入式SQL语句,并将代码转换为 Aurora 数据库可以使用的兼容格式。

使用AWSSCT和 Oracle OUT 绑定变量的架构图

图表显示了以下工作流:

  1. 使用 Aurora Postgre SQL 作为目标数据库,为源数据库生成AWSSCT报告。

  2. 识别动态SQL代码块中的匿名块(该代码块AWSSCT引发了错误)。

  3. 手动转换代码块并将代码部署到目标数据库上。

工具

AWS 服务

其他工具

  • pgAdmin使您能够连接到数据库服务器并与之交互。

  • Oracle SQL 开发人员是一个集成的开发环境,您可以使用它来开发和管理 Oracle 数据库中的数据库。你可以使用 SQL*Plus 或 Oracle Develo SQL per 来实现这种模式。

操作说明

任务描述所需技能

在亚马逊RDS或亚马逊上创建 Oracle 实例EC2。

要在亚马逊上创建 Oracle 数据库实例RDS,请参阅亚马逊RDS文档中的创建 Oracle 数据库实例并连接到 Oracle 数据库实例上的数据库

要在亚马逊弹性计算云 (亚马逊EC2) 上创建 Oracle 数据库实例,请参阅AWS规范性指南文档中的 Amazon EC2 for Oracle

DBA

创建用于迁移的数据库架构和对象。

您可以使用 Amazon Cloud Directory 创建数据库架构。有关更多信息,请参阅 Cloud Directory 文档中的创建架构

DBA

配置入站和出站安全组。

要创建和配置安全组,请参阅 Amazon RDS 文档中的使用安全组控制访问权限

DBA

确认数据库正在运行。

要检查数据库的状态,请参阅亚马逊RDS文档中的查看亚马逊RDS事件

DBA

配置 Oracle 源数据库

任务描述所需技能

在亚马逊RDS或亚马逊上创建 Oracle 实例EC2。

要在亚马逊上创建 Oracle 数据库实例RDS,请参阅亚马逊RDS文档中的创建 Oracle 数据库实例并连接到 Oracle 数据库实例上的数据库

要在亚马逊弹性计算云 (亚马逊EC2) 上创建 Oracle 数据库实例,请参阅AWS规范性指南文档中的 Amazon EC2 for Oracle

DBA

创建用于迁移的数据库架构和对象。

您可以使用 Amazon Cloud Directory 创建数据库架构。有关更多信息,请参阅 Cloud Directory 文档中的创建架构

DBA

配置入站和出站安全组。

要创建和配置安全组,请参阅 Amazon RDS 文档中的使用安全组控制访问权限

DBA

确认数据库正在运行。

要检查数据库的状态,请参阅亚马逊RDS文档中的查看亚马逊RDS事件

DBA
任务描述所需技能

在亚马逊RDS上创建 Aurora Postgre SQL 实例。

要创建 Aurora Postgre SQL 实例,请参阅亚马逊RDS文档中的在 Aurora Postgre 数据库集群上创建SQL数据库集群并连接数据库。

DBA

配置入站和出站安全组。

要创建和配置安全组,请参阅 Aurora 文档中的VPC通过创建安全组来提供对数据库集群的访问权限

DBA

确认 Aurora Postgre SQL 数据库正在运行。

要检查数据库的状态,请参阅 Aurora 文档中的查看亚马逊RDS事件

DBA

配置目标 Aurora Postgre 数据库 SQL

任务描述所需技能

在亚马逊RDS上创建 Aurora Postgre SQL 实例。

要创建 Aurora Postgre SQL 实例,请参阅亚马逊RDS文档中的在 Aurora Postgre 数据库集群上创建SQL数据库集群并连接数据库。

DBA

配置入站和出站安全组。

要创建和配置安全组,请参阅 Aurora 文档中的VPC通过创建安全组来提供对数据库集群的访问权限

DBA

确认 Aurora Postgre SQL 数据库正在运行。

要检查数据库的状态,请参阅 Aurora 文档中的查看亚马逊RDS事件

DBA
任务描述所需技能

Connect AWS SCT 连接到源数据库。

要AWSSCT连接到您的源数据库,请参阅AWSSCT文档中的SQL作为源连接到 Postgre

DBA

Connect AWS SCT 连接到目标数据库。

要AWSSCT连接到目标数据库,请参阅什么是 S AWS chema Conversion Tool? 在 AWS Schema Conversion Tool 用户指南中。

DBA

转换数据库架构,AWSSCT并将自动转换后的代码保存为SQL文件。

要保存AWSSCT转换后的文件,请参阅 Schema Conversion Tool 用户指南AWSSCT中的保存和应用转换后的AWS架构。

DBA

设置 AWS SCT

任务描述所需技能

Connect AWS SCT 连接到源数据库。

要AWSSCT连接到您的源数据库,请参阅AWSSCT文档中的SQL作为源连接到 Postgre

DBA

Connect AWS SCT 连接到目标数据库。

要AWSSCT连接到目标数据库,请参阅什么是 S AWS chema Conversion Tool? 在 AWS Schema Conversion Tool 用户指南中。

DBA

转换数据库架构,AWSSCT并将自动转换后的代码保存为SQL文件。

要保存AWSSCT转换后的文件,请参阅 Schema Conversion Tool 用户指南AWSSCT中的保存和应用转换后的AWS架构。

DBA
任务描述所需技能

获取SQL文件进行手动转换。

在AWSSCT转换后的文件中,提取需要手动转换的SQL文件。

DBA

更新脚本。

手动更新SQL文件。

DBA

迁移代码

任务描述所需技能

获取SQL文件进行手动转换。

在AWSSCT转换后的文件中,提取需要手动转换的SQL文件。

DBA

更新脚本。

手动更新SQL文件。

DBA

相关资源

其他信息

下面的示例代码显示了如何配置 Oracle 源数据库:

CREATE or replace PROCEDURE calc_stats_new1 ( a NUMBER, b NUMBER, result out NUMBER) IS BEGIN result:=a+b; END; /
set serveroutput on ; DECLARE a NUMBER := 4; b NUMBER := 7; plsql_block VARCHAR2(100); output number; BEGIN plsql_block := 'BEGIN calc_stats_new1(:a, :b,:output); END;'; EXECUTE IMMEDIATE plsql_block USING a, b,out output; DBMS_OUTPUT.PUT_LINE('output:'||output); END;

以下示例代码显示了如何配置目标 Aurora Postgre SQL 数据库:

w integer, x integer) RETURNS integer AS $BODY$ DECLARE begin return w + x ; end; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION test_pg.init() RETURNS void AS $BODY$ BEGIN if aws_oracle_ext.is_package_initialized ('test_pg' ) then return; end if; perform aws_oracle_ext.set_package_initialized ('test_pg' ); PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_output', NULL::INTEGER); PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_status', NULL::text); END; $BODY$ LANGUAGE plpgsql; DO $$ declare v_sql text; v_output_loc int; a integer :=1; b integer :=2; BEGIN perform test_pg.init(); --raise notice 'v_sql %',v_sql; execute 'do $a$ declare v_output_l int; begin select * from test_pg.calc_stats_new1('||a||','||b||') into v_output_l; PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_output'', v_output_l) ; end; $a$' ; v_output_loc := aws_oracle_ext.get_package_variable('test_pg', 'v_output'); raise notice 'v_output_loc %',v_output_loc; END ; $$
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。