

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.

# Migrer les fonctions et procédures Oracle comportant plus de 100 arguments vers PostgreSQL
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql"></a>

*Srinivas Potlachervoo, Amazon Web Services*

## Résumé
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-summary"></a>

Ce modèle montre comment migrer les fonctions et procédures de base de données Oracle comportant plus de 100 arguments vers PostgreSQL. Par exemple, vous pouvez utiliser ce modèle pour migrer les fonctions et procédures Oracle vers l'un des services de base de données AWS compatibles avec PostgreSQL suivants :
+ Amazon Relational Database Service (Amazon RDS) pour PostgreSQL
+ Amazon Aurora PostgreSQL-Compatible Edition

PostgreSQL ne prend pas en charge les fonctions ou les procédures comportant plus de 100 arguments. Pour contourner le problème, vous pouvez définir un nouveau type de données dont les champs de type correspondent aux arguments de la fonction source. Vous pouvez ensuite créer et exécuter une PL/pgSQL fonction qui utilise le type de données personnalisé comme argument.

## Conditions préalables et limitations
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Une instance de base de [données Oracle (DB) Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Une instance de base de données [Amazon RDS pour PostgreSQL ou une instance de base de données compatible avec Aurora PostgreSQL](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/)](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)

**Versions du produit**
+ Instance de base de données Oracle Amazon RDS 10.2 et versions ultérieures
+ Instance de base de données Amazon RDS PostgreSQL versions 9.4 et ultérieures, ou instances de base de données compatibles Aurora PostgreSQL versions 9.4 et ultérieures
+ Oracle SQL Developer version 18 et versions ultérieures
+ pgAdmin version 4 et versions ultérieures

## Architecture
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-architecture"></a>

**Pile technologique source**
+ Instance de base de données Oracle Amazon RDS 10.2 et versions ultérieures

**Pile technologique cible**
+ Instance de base de données Amazon RDS PostgreSQL versions 9.4 et ultérieures, ou instances de base de données compatibles Aurora PostgreSQL versions 9.4 et ultérieures

## Outils
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-tools"></a>

**Services AWS**
+ [Amazon Relational Database Service (Amazon RDS) pour PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) vous aide à configurer, exploiter et dimensionner une base de données relationnelle PostgreSQL dans le cloud 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.

**Autres services**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) est un environnement de développement intégré qui simplifie le développement et la gestion des bases de données Oracle dans les déploiements traditionnels et basés sur le cloud.
+ [pgAdmin](https://www.pgadmin.org/) est un outil de gestion open source pour PostgreSQL. Il fournit une interface graphique qui vous permet de créer, de gérer et d'utiliser des objets de base de données. 

## Bonnes pratiques
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-best-practices"></a>

Assurez-vous que le type de données que vous créez correspond aux champs de type inclus dans la fonction ou procédure Oracle source.

## Épopées
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-epics"></a>

### Exécuter une fonction ou une procédure Oracle comportant plus de 100 arguments
<a name="run-an-oracle-function-or-procedure-that-has-more-than-100-arguments"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez ou identifiez une Oracle/PLSQL fonction ou une procédure existante comportant plus de 100 arguments. | Créez une Oracle/PLSQL fonction ou une procédure comportant plus de 100 arguments.-ou-Identifiez une Oracle/PLSQL fonction ou une procédure existante comportant plus de 100 arguments.Pour plus d'informations, consultez les sections [14.7 Instruction CREATE FUNCTION et 14.11 Instruction](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-FUNCTION-statement.html#GUID-B71BC5BD-B87C-4054-AAA5-213E856651F2) [CREATE PROCEDURE de la documentation](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-PROCEDURE-statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54) de la base de données Oracle. | Connaissances d'Oracle/PLSQL | 
| Compilez la Oracle/PLSQL fonction ou la procédure. | Compilez la Oracle/PLSQL fonction ou la procédure.Pour plus d'informations, consultez la section [Compilation d'une fonction](https://docs.oracle.com/cd/E37097_01/doc.42/e35128/GUID-6B7B6F82-616D-4915-82BE-D4AE7F59CF37.htm#AEUTL165) dans la documentation de la base de données Oracle. | Connaissances d'Oracle/PLSQL | 
| Exécutez la Oracle/PLSQL fonction. | Exécutez la Oracle/PLSQL fonction ou la procédure. Enregistrez ensuite le résultat. | Connaissances d'Oracle/PLSQL | 

### Définissez un nouveau type de données qui correspond aux arguments de la fonction ou de la procédure source
<a name="define-a-new-data-type-that-matches-the-source-functionapos-s-or-procedureapos-s-arguments"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez un nouveau type de données dans PostgreSQL. | Définissez un nouveau type de données dans PostgreSQL qui inclut tous les mêmes champs que ceux qui apparaissent dans les arguments de la fonction ou de la procédure Oracle source.Pour plus d'informations, consultez [CREATE TYPE](https://www.postgresql.org/docs/current/sql-createtype.html) dans la documentation de PostgreSQL. | Connaissances de PostgreSQL PL/pgSQL  | 

### Créez une fonction PostgreSQL qui inclut le nouvel argument TYPE
<a name="create-a-postgresql-function-that-includes-the-new-type-argument"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une fonction PostgreSQL qui inclut le nouveau type de données. | Créez une fonction PostgreSQL qui inclut le nouvel argument. `TYPE`Pour consulter un exemple de fonction, consultez la section **Informations supplémentaires** de ce modèle. | Connaissances de PostgreSQL PL/pgSQL  | 
| Compilez la fonction PostgreSQL. | Compilez la fonction dans PostgreSQL. Si les nouveaux champs de type de données correspondent aux arguments de la fonction source ou de la procédure, la fonction se compile correctement. | Connaissances de PostgreSQL PL/pgSQL  | 
| Exécutez la fonction PostgreSQL. | Exécutez la fonction PostgreSQL. | Connaissances de PostgreSQL PL/pgSQL  | 

## Résolution des problèmes
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| La fonction renvoie l'erreur suivante :**ERREUR : erreur de syntaxe à proximité de « »** <statement> | Assurez-vous que toutes les instructions de la fonction se terminent par un point-virgule (). `;` | 
| La fonction renvoie l'erreur suivante :**ERREUR : « » n'est pas une variable connue** <variable> | Assurez-vous que la variable utilisée dans le corps de la fonction est répertoriée dans la `DECLARE` section de la fonction. | 

## Ressources connexes
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-resources"></a>
+ [Utilisation d'Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) (*Guide de l'utilisateur Amazon Aurora pour Aurora*)
+ [TYPE DE CRÉATION](https://www.postgresql.org/docs/11/sql-createtype.html) (documentation PostgreSQL)

## Informations supplémentaires
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-additional"></a>

**Exemple de fonction PostgreSQL incluant un argument TYPE**

```
CREATE OR REPLACE FUNCTION test_proc_new
(
    IN p_rec type_test_proc_args
) 
RETURNS void
AS
$BODY$
BEGIN

    /*
    **************
    The body would contain code to process the input values.
    For our testing, we will display couple of values.
    ***************
    */
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_acct_id: ', p_rec.p_acct_id);
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_id: ', p_rec.p_ord_id);
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_date: ', p_rec.p_ord_date);
   
END;
$BODY$
LANGUAGE plpgsql 
COST 100;
```