

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Gestionar bloques anónimos en instrucciones SQL dinámicas en Aurora PostgreSQL
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*anuradha chintha, Amazon Web Services*

## Resumen
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-summary"></a>

Nota: Amazon Cloud Directory ya no está abierto a nuevos clientes. [Para obtener alternativas a Cloud Directory, explore [Amazon DynamoDB y Amazon](https://aws.amazon.com/dynamodb/) Neptune.](https://aws.amazon.com/neptune/) Si necesita ayuda para elegir la alternativa adecuada para su caso de uso o si tiene alguna otra pregunta, póngase en contacto con nosotros. [AWS Support](https://aws.amazon.com/support/)

Este patrón le muestra cómo evitar el error que se produce al gestionar bloques anónimos en instrucciones SQL dinámicas. Recibirá un mensaje de error cuando use la herramienta de conversión de esquemas de AWS para convertir una base de datos de Oracle en una base de datos Aurora compatible con PostgreSQL. Para evitar el error, debe conocer el valor de una variable de enlace `OUT`, pero no podrá conocer el valor de una variable de enlace `OUT` hasta que ejecute la instrucción SQL. Este error se debe a que la herramienta de conversión de esquemas de AWS (AWS SCT) no entiende la lógica de la instrucción SQL dinámica. AWS SCT no puede convertir la sentencia SQL dinámica en PL/SQL código (es decir, funciones, procedimientos y paquetes).

## Requisitos previos y limitaciones
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**Requisitos previos **
+ Cuenta de AWS activa
+ [Instancia de base de datos (DB) de Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Amazon Relational Database Service (Amazon RDS) para la instancia de base de datos de Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Terminal interactiva de PostgreSQL (psql)](https://www.postgresql.org/docs/current/app-psql.html)
+ [SQL \*Plus](https://docs.oracle.com/cd/B14117_01/server.101/b12170/qstart.htm)
+ Esquema de `AWS_ORACLE_EXT` (parte del [paquete de extensión AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)) en la base de datos de destino
+ Versión más reciente de la [herramienta de conversión de esquemas de AWS (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) y los controladores necesarios

## Arquitectura
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-architecture"></a>

**Pila de tecnología de origen**
+ Oracle Database 10g en las instalaciones y versiones posteriores

**Pila de tecnología de destino**
+ PostgreSQL de Amazon Aurora
+ Amazon RDS para PostgreSQL
+ Herramienta de conversión de esquemas de AWS (AWS SCT)

**Arquitectura de migración**

El siguiente diagrama muestra cómo usar las variables de enlace `OUT` de AWS SCT y Oracle para escanear el código de la aplicación en busca de instrucciones SQL integradas y convertir el código a un formato compatible que pueda usar una base de datos de Aurora.

![Diagrama de arquitectura para usar las variables de enlace de AWS SCT y Oracle OUT](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Genere un informe de AWS SCT para la base de datos de origen usando Aurora PostgreSQL como base de datos de destino.

1. Identifique el bloque anónimo en el bloque de código SQL dinámico (por el que AWS SCT generó el error).

1. Convierta el bloque de código manualmente e impleméntelo en una base de datos de destino.

## Tools (Herramientas)
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-tools"></a>

**Servicios de AWS**
+ La [edición de Amazon Aurora compatible con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) es un motor de base de datos relacional compatible con ACID, completamente administrado que le permite configurar, utilizar y escalar implementaciones de PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) para Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) le ayuda a configurar, utilizar y escalar una base de datos relacional de Oracle en la nube de AWS.
+ La [Herramienta de conversión de esquemas de AWS (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) le ayuda a hacer previsibles las migraciones de bases de datos heterogéneas convirtiendo automáticamente el esquema de la base de datos de origen y la mayoría de los objetos de código de la base de datos a un formato compatible con la base de datos de destino.

**Otras herramientas**
+ [pgAdmin](https://www.pgadmin.org/) le permite conectarse e interactuar con su servidor de base de datos.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) es un entorno de desarrollo integrado que puede usar para desarrollar y gestionar bases de datos en Oracle Database. Puede usar [SQL \*Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) u Oracle SQL Developer para este patrón.

## Epics
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-epics"></a>

### Configurar la base de datos de orgien de Oracle
<a name="configure-the-oracle-source-database"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una instancia de Oracle en Amazon RDS o Amazon EC2. | Para crear una instancia de base de datos de Oracle en Amazon RDS, consulte [Crear una instancia de base de datos de Oracle y conectarse a una base de datos en una instancia de base de datos en Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html) en la documentación de Amazon RDS.<br />Para crear una instancia de base de datos de Oracle en Amazon Elastic Compute Cloud (Amazon EC2), consulte [Amazon EC2 for Oracle](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html) en la documentación de AWS Prescriptive Guidance. | Administrador de base de datos | 
| Cree un esquema de base de datos y objetos para la migración. | Puede usar Amazon Cloud Directory para crear un esquema de base de datos. Para más información, consulte [Crear un esquema](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html) en la documentación de Cloud Directory. | Administrador de base de datos | 
| Configure grupos de seguridad entrantes y salientes. | Para crear y configurar grupos de seguridad, consulte [Controlar el acceso con grupos de seguridad](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html) en la documentación de Amazon RDS. | Administrador de base de datos | 
| Confirme que la base de datos se está ejecutando. | Para comprobar el estado de su base de datos, consulte [Visualizar los eventos de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html) en la documentación de Amazon RDS. | Administrador de base de datos | 

### Configure la base de datos Aurora PostgreSQL de destino
<a name="configure-the-target-aurora-postgresql-database"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una instancia de Aurora PostgreSQL en Amazon RDS. | Para crear una instancia de Aurora PostgreSQL, consulte [Crear un clúster de base de datos y conectarse a una base de datos en un clúster de base de datos de Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html) en la documentación de Amazon RDS. | Administrador de base de datos | 
| Configure un grupo de seguridad entrante y saliente. | Para crear y configurar grupos de seguridad, consulte [Proporcionar acceso al clúster de base de datos en la VPC creando un grupo de seguridad](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup) en la documentación de Aurora. | Administrador de base de datos | 
| Confirme que la base de datos Aurora PostgreSQL se está ejecutando. | Para comprobar el estado de su base de datos, consulte [Visualizar los eventos de Amazon RDS](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html) en la documentación de Aurora. | Administrador de base de datos | 

### Configure AWS SCT
<a name="set-up-aws-sct"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Conectar AWS SCT a la base de datos de origen. | Para conectar AWS SCT a su base de datos de origen, consulte [Conectar a PostgreSQL como fuente](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting) en la documentación de AWS SCT. | Administrador de base de datos | 
| Conectar AWS SCT a la base de datos de destino. | Para conectar AWS SCT a su base de datos de destino, consulte [¿Qué es la la Herramienta de conversión de esquemas de AWS (AWS SCT)?](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) en la Guía del usuario de la la Herramienta de conversión de esquemas de AWS (AWS SCT). | Administrador de base de datos | 
| Convierta el esquema de la base de datos en AWS SCT y guarde el código convertido automáticamente como archivo SQL. | Para guardar los archivos convertidos de AWS SCT, consulte [Guardar y aplicar el esquema convertido en AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply) la Guía del usuario de la la Herramienta de conversión de esquemas de AWS (AWS SCT). | Administrador de base de datos | 

### Migración del código
<a name="migrate-the-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Obtenga el archivo SQL para la conversión manual. | En el archivo convertido de AWS SCT, extraiga el archivo SQL que requiere la conversión manual. | Administrador de base de datos | 
| Actualice el script. | Actualice manualmente el archivo SQL. | Administrador de base de datos | 

## Recursos relacionados
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Características de Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)

## Información adicional
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

En el siguiente ejemplo de código se muestra cómo configurar la base de datos de origen de 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;
```

En el siguiente ejemplo de código se muestra cómo configurar la base de datos de Aurora PostgreSQL de destino:

```
 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 ; 
$$
```