Appeler des procédures externes en tant que fonctions SQL

Affiche les étapes permettant d'appeler des procédures externes à l'aide de code PL/SQL dans votre base de données.

Aperçu des procédures externes

Les procédures externes sont des fonctions écrites dans un langage de troisième génération et pouvant être appelées à partir de code PL/SQL ou SQL comme s'il s'agissait d'un sous-programme ou d'une fonction PL/SQL.

Les procédures externes favorisent la réutilisabilité, l'efficacité et la modularité. Les bibliothèques de liens dynamiques (DLL) existantes écrites dans d'autres langages peuvent être appelées à partir de programmes PL/SQL. Les DLL ne sont chargées qu'en cas de besoin et peuvent être améliorées sans affecter les programmes appelants.

L'utilisation de procédures externes améliore également les performances, car les langages de troisième génération exécutent certaines tâches plus efficacement que le langage PL/SQL, qui est mieux adapté au traitement des transactions SQL.

Les procédures externes sont utiles dans les cas suivants :

  • Résoudre les problèmes scientifiques et d'ingénierie

  • Analyse des données

  • Contrôle des périphériques et des processus en temps réel

Pour plus d'informations, voir Qu'est-ce qu'une procédure externe?.

À propos de l'utilisation des procédures externes dans Autonomous Database

Vous pouvez appeler et utiliser des procédures externes dans votre base de données d'IA autonome avec des fonctions définies par l'utilisateur.

Vous n'installez pas de procédures externes sur une instance de base de données Autonomous AI Database. Pour utiliser une procédure externe, la procédure est hébergée à distance sur une machine virtuelle s'exécutant dans un réseau en nuage virtuel (VCN) Oracle Cloud Infrastructure.

Les procédures externes ne sont prises en charge que lorsque votre base de données IA autonome se trouve sur un point d'extrémité privé. L'instance d'agent EXTPROC est hébergée dans un sous-réseau privé et la base de données IA autonome accède à l'agent EXTPROC au moyen d'un point d'extrémité de connexion inverse.

Note

La base de données autonome d'IA ne prend en charge que les procédures externes en langage C.

Les procédures externes sont déployées à l'aide des éléments suivants :

  • Une image de conteneur fournie par Oracle avec l'agent EXTPROC installé et configuré dans le cadre de la pile du service de marché d'applications pour Oracle Cloud Infrastructure (OCI).

    L'instance d'agent EXTPROC est hébergée à distance sur une machine virtuelle s'exécutant dans un réseau en nuage virtuel (VCN) Oracle Cloud Infrastructure. La communication sécurisée entre votre base de données d'IA autonome et l'instance d'agent EXTPROC est assurée en définissant des règles de groupe de sécurité de réseau de sorte que le trafic soit autorisé entre votre instance de base de données d'IA autonome s'exécutant sur un point d'extrémité privé et l'instance d'agent EXTPROC.

    L'image de l'agent EXTPROC est préconfigurée pour héberger et exécuter des procédures externes sur le port 16000.

  • Procédures PL/SQL permettant de créer une bibliothèque et d'enregistrer et d'appeler des fonctions et des procédures externes.

    Pour plus d'informations, voir Ensemble DBMS_CLOUD_FUNCTION.

Suivez ces étapes pour appeler une procédure externe sur Autonomous AI Database :

Définir la procédure C

Définissez la procédure C à l'aide de l'un de ces prototypes.

  • Prototypes de style Kernighan & Ritchie. Exemple :

    void UpdateSalary(x)
     float x;
    ...
    
  • prototypes ISO/ANSI autres que les types de données numériques dont la largeur est inférieure à la largeur totale (tels que float, short, char). Exemple :

    void UpdateSalary(double x)
    ...
    
  • Autres types de données qui ne modifient pas la taille dans les promotions d'argument par défaut.

    Cet exemple montre comment modifier la taille dans les promotions d'argument par défaut :

    void UpdateSalary(float x)
    ...

Créer un fichier de bibliothèque partagée (.so)

Créez une bibliothèque d'objets partagés (fichier .so). La bibliothèque d'objets partagés contient la procédure C (procédure externe) définie à l'étape précédente.

Vous générez une bibliothèque d'objets partagés à l'aide de la commande suivante :

gcc -I/u01/app/oracle/extproc_libs/ -shared -fPIC -o extproc.so UpdateSalary.c

Cela crée l'objet partagé (.so), la bibliothèque extproc.so. La procédure UpdateSalary, définie à l'étape précédente, est contenue dans la bibliothèque extproc.so. Les bibliothèques d'objets partagés (.so) sont chargées dynamiquement lors de l'exécution.

Obtenir l'application de pile EXTPROC pour OCI Marketplace

Affiche les étapes pour obtenir l'application de pile EXTPROC du service de marché d'applications pour OCI.

Effectuez les étapes suivantes :
  1. Connectez-vous à la console OCI à l'adresse http://cloud.oracle.com. Pour plus d'informations, voir Se connecter à la console Oracle Cloud Infrastructure.
  2. Dans le menu de navigation de gauche d'Oracle Cloud Infrastructure, cliquez sur Marketplace, puis, sous Marketplace, cliquez sur Toutes les applications. Vous accédez alors au tableau de bord Marketplace All Applications.
  3. Entrez EXTPROC dans le champ de recherche et cliquez sur search (Rechercher).
  4. Cliquez sur le widget EXTPROC de Type : Pile.
Vous accédez ainsi à la page de détails d'Oracle Autonomous Database EXTPROC Agent.

Lancer l'application de pile EXTPROC

Lancez l'application de pile EXTPROC à partir de la page Détails de l'application EXTPROC.

  1. Dans la page Agent EXTPROC d'Oracle Autonomous Database, sous Pile de types, effectuez les opérations suivantes :
    • Dans la liste déroulante Version, sélectionnez la version d'ensemble de la pile. Par défaut, le menu affiche la dernière version.

    • Dans la liste déroulante Compartiment, sélectionnez le nom du compartiment dans lequel vous voulez lancer l'instance.

      Note

      Si vous n'avez pas l'autorisation de lancer l'instance dans le compartiment sélectionné, celle-ci est lancée dans le compartiment racine.
    • Cochez la case J'ai passé en revue et j'accepte les conditions standard d'Oracle.

  2. Cliquez sur Lancer la pile.

Vous accédez ainsi à la page Créer une pile qui vous permet de créer une pile pour l'agent EXTPROC.

Créer une pile pour l'application d'agent EXTPROC

Affiche les étapes de création de pile pour l'instance EXTPROC.

Dans l'Assistant Créer une pile, procédez comme suit :
  1. Dans la page Informations sur la pile, vérifiez et modifiez les informations suivantes si nécessaire :
    • Informations sur la pile

    • Fournisseurs personnalisés

    • Nom (facultatif) : Vous pouvez modifier le nom de pile par défaut. Évitez d'entrer des informations confidentielles.

    • Description (facultatif) : Vous pouvez modifier la description de pile par défaut. Évitez d'entrer des informations confidentielles.

    • Créer dans le compartiment

    • Version de Terraform

    • Marqueurs : Fournissez les informations suivantes pour affecter des marqueurs à la pile.

      • Espace de noms de marqueur : Pour ajouter un marqueur défini, sélectionnez un espace de noms existant. Pour ajouter une balise free-from, laissez la valeur vide.

      • Clé de marqueur : Pour ajouter un marqueur défini, sélectionnez une clé de marqueur existante. Pour ajouter un marqueur à structure libre, entrez le nom de la clé que vous voulez.

      • Valeur de marqueur : Entrez la valeur de marqueur qui vous intéresse.

      Ajouter un marqueur : Cliquez pour ajouter un autre marqueur.

      Voir Marques de ressource pour plus d'informations sur le marquage.

  2. Cliquez sur Suivant.
    Vous accédez alors à la page Configurer les variables qui vous permet de configurer des variables pour les ressources d'infrastructure créées par la pile lorsque vous exécutez la tâche d'application pour ce plan d'exécution.
  3. Dans la page Configurer les variables, entrez les informations dans les zones suivantes : Configurer l'agent EXTPROC, Configuration du réseau et Configuration du calcul.
    1. Fournissez des informations dans la zone Configurer l'agent EXTPROC.
      • Bibliothèques externes : Fournissez une liste de bibliothèques, séparées par une virgule (,), que vous voulez autoriser à appeler à partir de votre base de données IA autonome. Par exemple, extproc.so, extproc1.so.

        Après avoir créé la pile, vous devez copier les bibliothèques dans le répertoire /u01/app/oracle/extproc_libs sur la machine virtuelle de l'agent EXTPROC.

      • Mot de passe du portefeuille : Fournissez le mot de passe du portefeuille.

        Le portefeuille et un certificat auto-signé sont générés pour l'authentification TLS mutuelle entre la base de données IA autonome et la machine virtuelle de l'agent EXTPROC. Le portefeuille est créé dans le répertoire /u01/app/oracle/extproc_wallet.
        Note

        Une fois le portefeuille créé, le mot de passe du portefeuille ne peut pas être modifié.
    2. Fournissez des informations dans la zone Configuration du réseau.
      • Compartiment : Dans la liste déroulante, sélectionnez le compartiment dans lequel vous voulez placer la configuration.

      • Stratégie de réseau : Sélectionnez l'une des options dans la liste déroulante Créer un nouveau VCN et un sous-réseau ou Utiliser un VCN et un sous-réseau existants.

        • Créer un nouveau VCN et un sous-réseau : Sélectionnez cette option si aucun point d'extrémité privé n'est configuré pour votre base de données IA autonome. Cela crée un nouveau VCN avec un sous-réseau public et privé préconfiguré avec des règles de sécurité.

          Si vous sélectionnez cette option, la page affiche également la liste déroulante Configuration Strategy :

          Sélectionnez Use Recommended Configuration (Utiliser la configuration recommandée) dans la liste déroulante Configuration Strategy (Stratégie de configuration).

        • Utiliser le VCN et le sous-réseau existants : Sélectionnez cette option pour créer l'agent EXTPROC à l'aide d'un VCN existant. Cela crée l'instance d'agent EXTPROC dans le sous-réseau fourni.

          Lorsque vous sélectionnez cette option, fournissez les informations suivantes pour le VCN et le sous-réseau existants :

          • Sous Réseau en nuage virtuel :

            Dans la liste déroulante Réseau VCN existant, sélectionnez un réseau VCN existant. Si le VCN spécifié n'existe pas, un nouveau VCN est créé.

          • Sous Sous-réseau EXTPROC :

            Dans la liste déroulante Sous-réseau existant, sélectionnez un sous-réseau existant.

            Lorsque vous choisissez d'utiliser un VCN et un sous-réseau existants, ajoutez une règle de trafic entrant pour le port 16000 de l'instance d'agent EXTPROC. Vous ajoutez également une règle de trafic sortant sur le sous-réseau public.

            Pour plus d'informations, voir Configuration de l'accès au réseau à l'aide de points d'extrémité privés.

      • Type d'accès de l'agent EXTPROC : Sélectionnez l'une des options suivantes dans la liste déroulante.

        • Accès sécurisé à partir de bases de données de point d'extrémité privé ADB-S spécifiques dans votre VCN : Sélectionnez cette option pour autoriser uniquement les adresses IP de point d'extrémité privées spécifiées dans votre réseau en nuage virtuel (VCN) à se connecter à votre agent EXTPROC.

          Lorsque cette option est sélectionnée, vous fournissez une liste des adresses IP de point d'extrémité privé autorisées à l'étape suivante.

        • Accès sécurisé à partir de toutes les bases de données de point d'extrémité privé ADB-S de votre VCN : Sélectionnez cette option pour autoriser tout point d'extrémité privé dans votre réseau en nuage virtuel (VCN) à se connecter à votre agent EXTPROC.

      • Adresses IP de point d'extrémité privé

        Fournissez une liste d'adresses IP de point d'extrémité privé séparées par une virgule (,) pour la variable Adresses IP de point d'extrémité privé. Par exemple 10.0.0.0, 10.0.0.1.

        Note

        Ce champ s'affiche uniquement lorsque vous sélectionnez Accès sécurisé à partir de bases de données de point d'extrémité privé ADB-S spécifiques dans votre VCN pour le type d'accès de l'agent EXTPROC.
    3. Fournissez les informations sur la configuration du service de calcul.
      • Compartiment : Sélectionnez le compartiment dans lequel créer la pile.

      • Forme : Sélectionnez une forme en fonction des exigences de charge de travail de l'instance d'agent EXTPROC. La forme détermine les ressources affectées à l'instance d'agent EXTPROC.

      • Nombre d'unités OCPU : Sélectionnez le nombre d'unités OCPU à affecter à l'instance d'agent EXTPROC.

      • Taille de mémoire (Go) : Sélectionnez la quantité de mémoire en gigaoctets (Go) à affecter à l'instance d'agent EXTPROC.

      • Ajouter des clés SSH : Chargez une clé publique SSH ou collez la clé publique. Sélectionnez une des options suivantes :
        • Sélectionner un fichier de clé SSH : Chargez la partie clé publique de la paire de clés. Recherchez le fichier de clés à charger ou déposez-le dans la zone.

        • Coller la clé SSH : Collez la partie clé publique de la paire de clés dans la zone.

  4. Cliquez sur Suivant.

    Vous accédez alors à la page Review (Vérifier).

  5. Dans la page Vérifier, procédez comme suit :
    1. Vérifiez les variables de configuration.
    2. Cochez la case Exécuter l'application sous Exécuter l'application sur la pile créée?
    3. Cliquez sur Créer.
    Note

    Cette zone n'affiche pas les variables qui ont des valeurs par défaut ou des variables que vous n'avez pas modifiées.

    Le gestionnaire de ressources exécute la tâche d'application pour créer les ressources de la pile en conséquence. Vous accédez ainsi à la page Détails de la tâche et l'état de la tâche est Accepté. Lorsque la tâche d'application démarre, le statut passe à En cours.

    Note

    Les informations dont vous avez besoin pour vous connecter à l'instance créée dans le cadre de la pile sont disponibles dans l'onglet Informations sur l'application.

Charger le portefeuille pour créer une connexion sécurisée à l'instance d'agent EXTPROC

Un portefeuille auto-signé est créé dans le cadre de la création de l'application d'agent EXTPROC. Ce portefeuille vous permet d'accéder à l'instance d'agent Extrpoc.

Pour exécuter des procédures distantes sur l'instance d'agent EXTPROC, la base de données d'intelligence artificielle autonome et l'agent EXTPROC se connectent à l'aide du protocole mTLS (mutual Transport Layer Security). Lors de l'utilisation de la sécurité de la couche de transport mutuel (mTLS), les clients se connectent au moyen d'une connexion TCPS (TCP sécurisé) à la base de données à l'aide de la norme TLS 1.2 avec un certificat de client approuvé d'une autorité de certification (CA). Pour plus d'informations, voir À propos de la connexion à une instance de base de données du service d'intelligence artificielle autonome.
Note

Vous pouvez également obtenir et utiliser un certificat public émis par une autorité de certification.

Comme préalable, vous devez exporter le portefeuille vers le stockage d'objets à partir du répertoire /u01/app/oracle/extproc_wallet sur la machine virtuelle où EXTPROC s'exécute.

Suivez ces étapes pour charger le portefeuille dans votre base de données d'intelligence artificielle autonome :

  1. Importez le portefeuille, cwallet.sso, contenant les certificats de l'instance d'agent EXTPROC à partir du stockage d'objets dans votre base de données d'intelligence artificielle autonome. Notez ce qui suit pour le fichier de portefeuille :
    • Le fichier de portefeuille, ainsi que l'ID utilisateur et le mot de passe de la base de données, permettent d'accéder à l'instance d'agent EXTPROC. Stockez les fichiers de portefeuille dans un emplacement sécurisé et partagez-les uniquement avec les utilisateurs autorisés.

    • Ne renommez pas le fichier de portefeuille. Le fichier de portefeuille dans le stockage d'objets doit être nommé cwallet.sso.

  2. Créez des données d'identification pour accéder au stockage d'objets où vous stockez le fichier de portefeuille cwallet.sso. Voir Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres de nom d'utilisateur et de mot de passe pour différents services de stockage d'objets.
    La création de données d'identification pour accéder au magasin d'objets Oracle Cloud Infrastructure n'est pas requise si vous activez les données d'identification du principal de ressource. Pour plus d'informations, voir À propos de l'utilisation d'un principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.
  3. Créez un répertoire sur Autonomous Database pour le fichier de portefeuille cwallet.sso.
    CREATE DIRECTORY wallet_dir AS 'directory_location';

    Voir Créer un répertoire dans Autonomous AI Database pour plus d'informations sur la création de répertoires.

  4. Utilisez DBMS_CLOUD.GET_OBJECT pour charger le portefeuille. Exemple :
    BEGIN
      DBMS_CLOUD.GET_OBJECT (
        credential_name     => 'DEF_CRED_NAME',
        object_uri          => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
        directory_name      => 'WALLET_DIR'
    );
    END;
    /

    Dans cet exemple, namespace-string est l'espace de noms du service de stockage d'objets pour Oracle Cloud Infrastructure Object Storage et bucketname est le nom du seau. Pour plus d'informations, voir Espaces de noms du stockage d'objets.

    Le portefeuille est copié dans le répertoire créé à l'étape précédente, WALLET_DIR. Le portefeuille qui vous permet de vous connecter à l'instance d'agent EXTPROC est maintenant disponible sur votre instance Autonomous Database.

Etapes d'appel d'une procédure externe en tant que fonction SQL

Affiche les étapes d'appel d'une procédure externe en tant que fonction SQL.

Après avoir lancé l'application de pile OCI Marketplace EXTPROC et l'avoir configurée pour exécuter des procédures externes, vous créez une bibliothèque de fonctions d'encapsuleur SQL qui référencent et appellent leurs procédures externes respectives.

Comme préalable, les bibliothèques sur liste blanche doivent être copiées dans le répertoire /u01/app/oracle/extproc_libs sur la machine virtuelle EXTPROC.

Suivez ces étapes pour créer une bibliothèque dans votre base de données d'IA autonome et enregistrer les sous-programmes C en tant que procédure externe dans la bibliothèque :
  1. Créez une bibliothèque.

    Une procédure externe est une routine en langage C stockée dans une bibliothèque. Pour appeler des procédures externes avec Autonomous AI Database, vous créez une bibliothèque.

    Exécutez DBMS_CLOUD_FUNCTION.CREATE_CATALOG pour créer une bibliothèque. Exemple :

    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
            library_name               => 'demolib',
            library_listener_url       => 'remote_extproc_hostname:16000',
            library_wallet_dir_name    => 'wallet_dir',
            library_ssl_server_cert_dn => 'CN=VM Hostname',
            library_remote_path        => '/u01/app/oracle/extproc_libs/library name'
    );
    END;
    /
    

    Cela crée la bibliothèque demolib dans votre base de données d'intelligence artificielle autonome et enregistre la bibliothèque de liens dynamiques dans votre base de données. L'instance d'agent EXTPROC est préconfigurée pour héberger des procédures externes sur le port 16000.

    Pour plus d'informations, voir ProcédureCREATE_CATALOG.

    Interrogez les vues Vue DBA_CLOUD_FUNCTION_CATALOG et Vue USER_CLOUD_FUNCTION_CATALOG pour extraire la liste de tous les catalogues et bibliothèques de votre base de données.

    Interrogez la vue USER_CLOUD_FUNCTION_ERRORS View pour lister les erreurs générées lors de la validation de la connexion à l'emplacement de la bibliothèque distante.

  2. Créez la fonction.

    Exemple :

    
    CREATE OR REPLACE FUNCTION ftest(
          x VARCHAR2, 
          y VARCHAR2) 
    RETURN VARCHAR2 AS LANGUAGE C
          LIBRARY demolib
          NAME "demolibfunction"
          PARAMETERS(
              x STRING, 
              y STRING);
    /
  3. Vous pouvez supprimer une bibliothèque existante à l'aide de la procédure DROP_CATALOG. Exemple :
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          LIBRARY_NAME  => 'demolib'
      );
    END;
    /
    

    Cette action supprime la bibliothèque DEMOLIB.

    Pour plus d'informations, voir ProcédureDROP_CATALOG.