Gérez les fonctions Oracle surchargées dans la compatibilité avec Aurora PostgreSQL - Recommandations AWS

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érez les fonctions Oracle surchargées dans la compatibilité avec Aurora PostgreSQL

Créée par Sumana Yanamandra (AWS)

Environnement : PoC ou pilote

Source : base de données Oracle

Cible : compatible avec Aurora PostgreSQL

Type R : Replateforme

Charge de travail : Oracle

Technologies : bases de données ; migration

Services AWS : Amazon Aurora

Récapitulatif

Le code que vous migrez d'une base de données Oracle sur site vers l'édition compatible avec Amazon Aurora PostgreSQL peut inclure des fonctions surchargées. Ces fonctions ont la même définition, c'est-à-dire le même nom de fonction et le même nombre et le même type de données de paramètres d'entrée (IN), mais le type de données ou le nombre de paramètres de sortie () peuvent être différents. OUT 

Ces incohérences de paramètres peuvent entraîner des problèmes dans PostgreSQL, car il est difficile de déterminer la fonction à exécuter. Ce modèle montre comment gérer les fonctions surchargées lorsque vous migrez le code de votre base de données vers une version compatible avec Aurora PostgreSQL.

Conditions préalables et limitations

Prérequis

  • Une instance de base de données Oracle comme base de données source

  • Une instance de base de données compatible avec Aurora PostgreSQL en tant que base de données cible (voir les instructions de la documentation Aurora)

Versions du produit

Outils

Services AWS

  • Amazon Aurora PostgreSQL Compatible Edition 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 outils

  • Oracle SQL Developer est un environnement de développement intégré gratuit permettant de travailler avec SQL dans les bases de données Oracle dans le cadre de déploiements traditionnels et dans le cloud. 

  • pgAdmin 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.

Épopées

TâcheDescriptionCompétences requises
Créez une fonction dans PostgreSQL dotée d'un paramètre d'entrée et d'un paramètre de sortie.

L'exemple suivant illustre une fonction nommée test_overloading dans Aurora PostgreSQL compatible. Cette fonction possède deux paramètres : un paramètre de texte d'entrée et un paramètre de texte de sortie.

CREATE OR REPLACE FUNCTION public.test_overloading(          str1 text,          OUT str2 text)     LANGUAGE 'plpgsql'     COST 100     VOLATILE AS $BODY$ DECLARE BEGIN          str2 := 'Success';     RETURN ;     EXCEPTION         WHEN others THEN              RETURN ; END; $BODY$;
Ingénieur de données, compatible avec Aurora PostgreSQL
Exécutez la fonction dans PostgreSQL.

Exécutez la fonction que vous avez créée à l'étape précédente.

select public.test_overloading('Test');

Il devrait afficher le résultat suivant.

Success
Ingénieur de données, compatible avec Aurora PostgreSQL
TâcheDescriptionCompétences requises
Utilisez le même nom de fonction pour créer une fonction surchargée dans PostgreSQL.

Créez une fonction surchargée compatible avec Aurora PostgreSQL qui utilise le même nom de fonction que votre fonction précédente. L'exemple suivant est également nommétest_overloading, mais il comporte trois paramètres : un paramètre de texte en entrée, un paramètre de texte en sortie et un paramètre entier en sortie.

CREATE OR REPLACE FUNCTION public.test_overloading(          str1 text,          OUT str2 text,          OUT num1 integer)     LANGUAGE 'plpgsql'       COST 100     VOLATILE AS $BODY$ DECLARE str3 text;   BEGIN            str2 := 'Success';          num1 := 100;       RETURN ;     EXCEPTION         WHEN others THEN              RETURN ; END; $BODY$;
Ingénieur de données, compatible avec Aurora PostgreSQL
Exécutez la fonction dans PostgreSQL.

Lorsque vous exécutez cette fonction, elle échoue avec le message d'erreur suivant. 

ERROR: cannot change return type of existing function HINT:      Use DROP FUNCTION test_overloading(text) first.

Cela se produit parce que la compatibilité avec Aurora PostgreSQL ne prend pas directement en charge la surcharge de fonctions. Il ne peut pas identifier la fonction à exécuter, car le nombre de paramètres de sortie est différent dans la deuxième version de la fonction, bien que les paramètres d'entrée soient identiques.

Ingénieur de données, compatible avec Aurora PostgreSQL
TâcheDescriptionCompétences requises
Ajoutez INOUT au premier paramètre de sortie.

Pour contourner le problème, modifiez le code de fonction en représentant le premier paramètre de sortie sous INOUT la forme.

CREATE OR REPLACE FUNCTION public.test_overloading(          str1 text,          INOUT str2 text,          OUT num1 integer)     LANGUAGE 'plpgsql'       COST 100     VOLATILE AS $BODY$ DECLARE str3 text; BEGIN            str2 := 'Success';          num1 := 100;       RETURN ;     EXCEPTION         WHEN others THEN              RETURN ; END; $BODY$;
Ingénieur de données, compatible avec Aurora PostgreSQL
Exécutez la fonction révisée.

Exécutez la fonction que vous avez mise à jour à l'aide de la requête suivante. Vous passez une valeur nulle comme deuxième argument de cette fonction, car vous avez déclaré ce paramètre INOUT pour éviter l'erreur. 

select public.test_overloading('Test', null);

La fonction est maintenant créée avec succès.

Success, 100
Ingénieur de données, compatible avec Aurora PostgreSQL
Valider les résultats.

Vérifiez que le code contenant la fonction surchargée a été correctement converti.

Ingénieur de données, compatible avec Aurora PostgreSQL

Ressources connexes