

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gérer les blocs anonymes dans les instructions Dynamic SQL dans Aurora PostgreSQL
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*anuradha chintha, Amazon Web Services*

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

Remarque : Amazon Cloud Directory n'est plus ouvert aux nouveaux clients. [Pour découvrir des alternatives à Cloud Directory, explorez [Amazon DynamoDB et Amazon](https://aws.amazon.com/dynamodb/) Neptune.](https://aws.amazon.com/neptune/) Si vous avez besoin d'aide pour choisir l'alternative adaptée à votre cas d'utilisation, ou pour toute autre question, contactez [AWS Support](https://aws.amazon.com/support/).

Ce modèle vous montre comment éviter l'erreur que vous obtenez lors de la gestion de blocs anonymes dans des instructions Dynamic SQL. Vous recevez un message d'erreur lorsque vous utilisez l'outil AWS Schema Conversion Tool pour convertir une base de données Oracle en une base de données Aurora PostgreSQL Edition compatible. Pour éviter cette erreur, vous devez connaître la valeur d'une variable de `OUT` liaison, mais vous ne pouvez connaître la valeur d'une variable de `OUT` liaison qu'après avoir exécuté l'instruction SQL. L'erreur est due au fait que l'AWS Schema Conversion Tool (AWS SCT) ne comprend pas la logique contenue dans l'instruction Dynamic SQL. AWS SCT ne peut pas convertir l'instruction SQL dynamique en PL/SQL code (c'est-à-dire en fonctions, procédures et packages).

## Conditions préalables et limitations
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**Conditions préalables**
+ Compte AWS actif
+ [Instance de base de données (DB) Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Amazon Relational Database Service (Amazon RDS) pour instance de base de données Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Terminal interactif 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)
+ `AWS_ORACLE_EXT`schéma (inclus dans le [pack d'extension AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)) dans votre base de données cible
+ Dernière version d'[AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) et ses pilotes requis

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

**Pile technologique source**
+ Base de données Oracle 10g et version ultérieure sur site

**Pile technologique cible**
+ Amazon Aurora PostgreSQL
+ Amazon RDS pour PostgreSQL
+ Outil de conversion de schéma AWS (AWS SCT)

**Architecture de migration**

Le schéma suivant montre comment utiliser les variables de `OUT` liaison AWS SCT et Oracle pour scanner le code de votre application à la recherche d'instructions SQL intégrées et convertir le code dans un format compatible utilisable par une base de données Aurora.

![Schéma d'architecture pour l'utilisation des variables de liaison AWS SCT et Oracle OUT](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


Le schéma suivant illustre le flux de travail suivant :

1. Générez un rapport AWS SCT pour la base de données source en utilisant Aurora PostgreSQL comme base de données cible.

1. Identifiez le bloc anonyme dans le bloc de code SQL dynamique (pour lequel AWS SCT a généré l'erreur).

1. Convertissez le bloc de code manuellement et déployez le code sur une base de données cible.

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

**Services AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) est un moteur de base de données relationnelle entièrement géré et compatible ACID qui vous aide à configurer, exploiter et dimensionner les déploiements PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) pour](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) Oracle vous aide à configurer, exploiter et dimensionner une base de données relationnelle Oracle dans le cloud AWS.
+ [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) vous aide à rendre les migrations de bases de données hétérogènes prévisibles en convertissant automatiquement le schéma de base de données source et la majorité des objets du code de base de données dans un format compatible avec la base de données cible.

**Autres outils**
+ [pgAdmin](https://www.pgadmin.org/) vous permet de vous connecter à votre serveur de base de données et d'interagir avec celui-ci.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) est un environnement de développement intégré que vous pouvez utiliser pour développer et gérer des bases de données dans Oracle Database. Vous pouvez utiliser [SQL \*Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) ou Oracle SQL Developer pour ce modèle.

## Épopées
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-epics"></a>

### Configuration de la base de données source Oracle
<a name="configure-the-oracle-source-database"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une instance Oracle sur Amazon RDS ou Amazon EC2. | Pour créer une instance de base de données Oracle sur Amazon RDS, consultez la section [Création d'une instance de base de données Oracle et connexion à une base de données sur une instance de base de données Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html) dans la documentation Amazon RDS.<br />Pour créer une instance de base de données Oracle sur Amazon Elastic Compute Cloud (Amazon EC2), consultez [Amazon EC2 for Oracle](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html) dans la documentation AWS Prescriptive Guidance. | DBA | 
| Créez un schéma de base de données et des objets pour la migration. | Vous pouvez utiliser Amazon Cloud Directory pour créer un schéma de base de données. Pour plus d'informations, consultez la section [Créer un schéma](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html) dans la documentation Cloud Directory. | DBA | 
| Configurez les groupes de sécurité entrants et sortants. | Pour créer et configurer des groupes de sécurité, consultez la section [Contrôle de l'accès à l'aide de groupes de sécurité](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html) dans la documentation Amazon RDS. | DBA | 
| Vérifiez que la base de données est active. | Pour vérifier l'état de votre base de données, consultez la section [Affichage des événements Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html) dans la documentation Amazon RDS. | DBA | 

### Configuration de la base de données Aurora PostgreSQL cible
<a name="configure-the-target-aurora-postgresql-database"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une instance Aurora PostgreSQL dans Amazon RDS. | Pour créer une instance Aurora PostgreSQL, [consultez la section Création d'un cluster de base de données et connexion à une base de données sur un cluster de base de données Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html) dans la documentation Amazon RDS. | DBA | 
| Configurez un groupe de sécurité entrant et sortant. | Pour créer et configurer des groupes de sécurité, consultez la section [Fournir un accès au cluster de base de données dans le VPC en créant un groupe de sécurité](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup) dans la documentation Aurora. | DBA | 
| Vérifiez que la base de données Aurora PostgreSQL est en cours d'exécution. | Pour vérifier l'état de votre base de données, consultez la section [Affichage des événements Amazon RDS](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html) dans la documentation Aurora. | DBA | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Connectez AWS SCT à la base de données source. | Pour connecter AWS SCT à votre base de données source, consultez la section [Connexion à PostgreSQL en tant que source](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting) dans la documentation AWS SCT. | DBA | 
| Connectez AWS SCT à la base de données cible. | Pour connecter AWS SCT à votre base de données cible, consultez le document [What is the AWS Schema Conversion Tool ?](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) dans le guide de l'utilisateur d'AWS Schema Conversion Tool. | DBA | 
| Convertissez le schéma de base de données dans AWS SCT et enregistrez le code converti automatiquement sous forme de fichier SQL. | Pour enregistrer les fichiers convertis par AWS SCT, consultez la section [Enregistrer et appliquer votre schéma converti dans AWS SCT dans](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply) le guide de l'utilisateur d'AWS Schema Conversion Tool. | DBA | 

### Migrer le code
<a name="migrate-the-code"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Obtenez le fichier SQL pour une conversion manuelle. | Dans le fichier converti AWS SCT, extrayez le fichier SQL qui nécessite une conversion manuelle. | DBA | 
| Mettez à jour le script. | Mettez à jour manuellement le fichier SQL. | DBA | 

## Ressources connexes
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Fonctionnalités d'Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)

## Informations supplémentaires
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

L'exemple de code suivant montre comment configurer la base de données source 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;
```

L'exemple de code suivant montre comment configurer la base de données Aurora PostgreSQL cible :

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