

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.

# Procédures stockées externes pour Amazon RDS for Db2
<a name="db2-external-stored-procedures"></a>

Vous pouvez créer des routines externes et les enregistrer dans vos bases de données Amazon RDS for Db2 en tant que procédures stockées externes. Actuellement, RDS for Db2 ne prend en charge que les routines basées sur Java pour les procédures stockées externes.

## Procédures stockées externes basées sur Java
<a name="db2-external-stored-procedures-java"></a>

Les procédures stockées externes basées sur Java sont des routines Java externes que vous enregistrez dans votre base de données RDS for Db2 en tant que procédures stockées externes.

**Topics**
+ [Limites pour les procédures stockées externes basées sur Java](#db2-external-stored-procedures-java-limitations)
+ [Configuration des procédures stockées externes basées sur Java](#db2-external-stored-procedures-java-configuring)

### Limites pour les procédures stockées externes basées sur Java
<a name="db2-external-stored-procedures-java-limitations"></a>

Avant de développer votre routine externe, tenez compte des limites et restrictions suivantes.

Pour créer votre routine externe, assurez-vous d’utiliser le kit de développement Java (JDK) fourni par Db2. Pour plus d’informations, consultez [Support logiciel Java pour les produits de base de données Db2.](https://www.ibm.com/docs/en/db2/11.5?topic=servers-java-software-support-db2-database-products).

Votre programme Java peut créer des fichiers uniquement dans le répertoire `/tmp` et Amazon RDS ne prend pas en charge l’activation des autorisations d’exécution ou de définition d’un identifiant utilisateur (SUID) sur ces fichiers. Votre programme Java ne peut pas non plus utiliser les appels système socket ou les appels système suivants :
+ \$1sysctl
+ acct
+ afs\$1syscall
+ bpf
+ capset
+ chown
+ chroot
+ create\$1module
+ delete\$1module
+ fanotify\$1init
+ fanotify\$1mark
+ finit\$1module
+ fsconfig
+ fsopen
+ fspick
+ get\$1kernel\$1syms
+ getpmsg
+ init\$1module
+ mount
+ move\$1mount
+ nfsservctl
+ open\$1by\$1handle\$1at
+ open\$1tree
+ pivot\$1root
+ putpmsg
+ query\$1module
+ quotactl
+ reboot
+ security
+ setdomainname
+ setfsuid
+ sethostname
+ sysfs
+ tuxcall
+ umount2
+ uselib
+ ustat
+ vhangup
+ vserver

Pour des restrictions supplémentaires sur les routines externes pour Db2, consultez [Restrictions sur les routines externes](https://www.ibm.com/docs/en/db2/11.5?topic=routines-restrictions-external) dans la documentation IBM Db2.

### Configuration des procédures stockées externes basées sur Java
<a name="db2-external-stored-procedures-java-configuring"></a>

Pour configurer une procédure stockée externe, créez un fichier .jar avec votre routine externe, installez-le sur votre base de données RDS for Db2, puis enregistrez-le en tant que procédure stockée externe.

**Topics**
+ [Étape 1 : activation des procédures stockées externes](#db2-external-stored-procedures-java-enable)
+ [Étape 2 : installation du fichier .jar avec votre routine externe](#db2-external-stored-procedures-java-install-jar)
+ [Étape 3 : enregistrement de la procédure stockée externe](#db2-external-stored-procedures-java-register)
+ [Étape 4 : validation de la procédure stockée externe](#db2-external-stored-procedures-java-validate)

#### Étape 1 : activation des procédures stockées externes
<a name="db2-external-stored-procedures-java-enable"></a>

Pour activer des procédures stockées externes, dans un groupe de paramètres personnalisés associé à votre instance de base de données, définissez le paramètre `db2_alternate_authz_behaviour` sur l’une des valeurs suivantes :
+ `EXTERNAL_ROUTINE_DBADM` : accorde implicitement à tout utilisateur, groupe ou rôle ayant l’autorité `DBADM` l’autorisation `CREATE_EXTERNAL_ROUTINE`.
+ `EXTERNAL_ROUTINE_DBAUTH` : permet à un utilisateur ayant l’autorité `DBADM` d’accorder des autorisations `CREATE_EXTERNAL_ROUTINE` à tout utilisateur, groupe ou rôle. Dans ce cas, aucun utilisateur, groupe ou rôle ne reçoit implicitement cette autorisation, pas même un utilisateur ayant l’autorité `DBADM`.

Pour plus d’informations sur ce paramètre, consultez l’[instruction GRANT (autorités de base de données)](https://www.ibm.com/docs/en/db2/11.5?topic=statements-grant-database-authorities) dans la documentation IBM Db2.

Vous pouvez créer et modifier un groupe de paramètres personnalisés à l’aide de la AWS Management Console, de l’ AWS CLI ou de l’API Amazon RDS.

##### Console
<a name="db2-external-stored-procedures-java-enable-console"></a>

**Configuration du paramètre db2\$1alternate\$1authz\$1behaviour dans un groupe de paramètres personnalisé**

1. Si vous souhaitez utiliser un groupe de paramètres de base de données personnalisé différent de celui que votre instance de base de données utilise, créez un nouveau groupe de paramètres de base de données. Si vous utilisez le modèle BYOL (Bring your own license), assurez-vous que le nouveau groupe de paramètres personnalisés inclut le IBM IDs. Pour plus d'informations à ce sujet IDs, consultez[IBM IDs pour apporter votre propre licence (BYOL) pour Db2](db2-licensing.md#db2-prereqs-ibm-info). Pour plus d’informations sur la création d’un groupe de paramètres de base de données, consultez [Création d’un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Creating.md).

1. Définissez la valeur du paramètre `db2_alternate_authz_behaviour` dans votre groupe de paramètres personnalisés. Pour plus d’informations sur la modification d’un groupe de paramètres, consultez [Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Modifying.md).

##### AWS CLI
<a name="db2-external-stored-procedures-java-enable-cli"></a>

**Configuration du paramètre db2\$1alternate\$1authz\$1behaviour dans un groupe de paramètres personnalisé**

1. Si vous souhaitez utiliser un groupe de paramètres de base de données personnalisé différent de celui que votre instance de base de données utilise, créez un groupe de paramètres personnalisés en exécutant la commande [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html). Si vous utilisez le modèle BYOL (Bring your own license), assurez-vous que le nouveau groupe de paramètres personnalisés inclut le IBM IDs. Pour plus d'informations à ce sujet IDs, consultez[IBM IDs pour apporter votre propre licence (BYOL) pour Db2](db2-licensing.md#db2-prereqs-ibm-info).

   Inclure les options requises suivantes :
   + `--db-parameter-group-name` : nom du groupe de paramètres que vous créez.
   + `--db-parameter-group-family` : édition et version majeure du moteur Db2. Les valeurs valides sont `db2-se-11.5` et `db2-ae-11.5`. 
   + `--description` : description de ce groupe de paramètres.

   Pour plus d’informations sur la création d’un groupe de paramètres de base de données, consultez [Création d’un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Creating.md).

   L’exemple suivant montre comment créer un groupe de paramètres personnalisés nommé `MY_EXT_SP_PARAM_GROUP` pour la famille de groupes de paramètres `db2-se-11.5`.

   Pour Linux, macOS ou Unix :

   ```
   aws rds create-db-parameter-group \
   --region us-east-1 \
   --db-parameter-group-name MY_EXT_SP_PARAM_GROUP \
   --db-parameter-group-family db2-se-11.5 \ 
   --description "test db2 external routines"
   ```

   Pour Windows :

   ```
   aws rds create-db-parameter-group ^
   --region us-east-1 ^
   --db-parameter-group-name MY_EXT_SP_PARAM_GROUP ^
   --db-parameter-group-family db2-se-11.5 ^ 
   --description "test db2 external routines"
   ```

1. Modifiez le paramètre `db2_alternate_authz_behaviour` dans votre groupe de paramètres personnalisés en exécutant la commande [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html).

   Inclure les options requises suivantes :
   + `--db-parameter-group-name` : nom du groupe de paramètres que vous avez créé.
   + `--parameters` : tableau des noms de paramètres, des valeurs et méthode d’application pour la mise à jour des paramètres.

   Pour plus d’informations sur la modification d’un groupe de paramètres, consultez [Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Modifying.md).

   L’exemple suivant montre comment modifier le groupe de paramètres `MY_EXT_SP_PARAM_GROUP` en définissant la valeur de `db2_alternate_authz_behaviour` sur `EXTERNAL_ROUTINE_DBADM`.

   Pour Linux, macOS ou Unix :

   ```
   aws rds modify-db-parameter-group \
       --db-parameter-group-name MY_EXT_SP_PARAM_GROUP \
       --parameters "ParameterName='db2_alternate_authz_behaviour',ParameterValue='EXTERNAL_ROUTINE_DBADM',ApplyMethod=immediate"
   ```

   Pour Windows :

   ```
   aws rds modify-db-parameter-group ^
       --db-parameter-group-name MY_EXT_SP_PARAM_GROUP ^
       --parameters "ParameterName='db2_alternate_authz_behaviour',ParameterValue='EXTERNAL_ROUTINE_DBADM',ApplyMethod=immediate"
   ```

##### API RDS
<a name="db2-external-stored-procedures-java-enable-api"></a>

**Configuration du paramètre db2\$1alternate\$1authz\$1behaviour dans un groupe de paramètres personnalisé**

1. Si vous souhaitez utiliser un groupe de paramètres de base de données personnalisé différent de celui que votre instance de base de données utilise, créez un nouveau groupe de paramètres de base de données à l’aide de l’opération Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBParameterGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBParameterGroup.html). Si vous utilisez le modèle BYOL (Bring your own license), assurez-vous que le nouveau groupe de paramètres personnalisés inclut le IBM Db2 IDs. Pour plus d'informations à ce sujet IDs, consultez[IBM IDs pour apporter votre propre licence (BYOL) pour Db2](db2-licensing.md#db2-prereqs-ibm-info).

   Incluez les paramètres requis suivants :
   + `DBParameterGroupName`
   + `DBParameterGroupFamily`
   + `Description`

   Pour plus d’informations sur la création d’un groupe de paramètres de base de données, consultez [Création d’un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Creating.md).

1. Modifiez le paramètre `db2_alternate_authz_behaviour` dans votre groupe de paramètres personnalisés que vous avez créé à l’aide de l’opération RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBParameterGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBParameterGroup.html).

   Incluez les paramètres requis suivants :
   + `DBParameterGroupName`
   + `Parameters`

   Pour plus d’informations sur la modification d’un groupe de paramètres, consultez [Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS](USER_WorkingWithParamGroups.Modifying.md).

#### Étape 2 : installation du fichier .jar avec votre routine externe
<a name="db2-external-stored-procedures-java-install-jar"></a>

Après avoir créé votre routine Java, créez le fichier .jar, puis exécutez `db2 "call sqlj.install_jar('file:file_path',jar_ID)"` pour l’installer sur votre base de données RDS for Db2.

L’exemple suivant montre comment créer une routine Java et l’installer sur une base de données RDS for Db2. L’exemple comprend un exemple de code pour une routine simple que vous pouvez utiliser pour tester le processus. Cet exemple repose sur les hypothèses suivantes :
+ Le code Java est compilé sur un serveur sur lequel Db2 est installé. Il s’agit d’une bonne pratique, car le fait de ne pas compiler avec le JDK fourni par IBM peut entraîner des erreurs inexpliquées.
+ Le serveur dispose de la base de données RDS for Db2 cataloguée localement.

Si vous souhaitez essayer le processus avec l’exemple de code suivant, copiez-le et enregistrez-le dans un fichier nommé `MYJAVASP.java`.

```
import java.sql.*;
public class MYJAVASP
{
public static void my_JAVASP (String inparam) throws SQLException, Exception
{
try
{
// Obtain the calling context's connection details.
Connection myConn = DriverManager.getConnection("jdbc:default:connection");
String myQuery = "INSERT INTO TEST.TEST_TABLE VALUES (?, CURRENT DATE)";
PreparedStatement myStmt = myConn.prepareStatement(myQuery);
myStmt.setString(1, inparam);
myStmt.executeUpdate();
}
catch (SQLException sql_ex)
{
throw sql_ex;
}
catch (Exception ex)
{
throw ex;
}
}
```

La commande suivante compile la routine Java.

```
~/sqllib/java/jdk64/bin/javac MYJAVASP.java
```

La commande suivante crée un fichier .jar.

```
~/sqllib/java/jdk64/bin/jar cvf MYJAVASP.jar MYJAVASP.class
```

Les commandes suivantes se connectent à la base de données nommée `MY_DB2_DATABASE` et installent le fichier .jar.

```
db2 "connect to MY_DB2_DATABASE user master_username using master_password" 

db2 "call sqlj.install_jar('file:/tmp/MYJAVASP.jar','MYJAVASP')"
db2 "call sqlj.refresh_classes()"
```

#### Étape 3 : enregistrement de la procédure stockée externe
<a name="db2-external-stored-procedures-java-register"></a>

Après avoir installé le fichier .jar sur votre base de données RDS for Db2, enregistrez-le en tant que procédure stockée en exécutant la commande `db2 CREATE PROCEDURE` ou `db2 REPLACE PROCEDURE`.

L’exemple suivant montre comment se connecter à la base de données et enregistrer la routine Java créée à l’étape précédente en tant que procédure stockée.

```
db2 "connect to MY_DB2_DATABASE user master_username using master_password"

create procedure TESTSP.MYJAVASP (in input char(6))
specific myjavasp
dynamic result sets 0
deterministic
language java
parameter style java
no dbinfo
fenced
threadsafe
modifies sql data
program type sub
external name 'MYJAVASP!my_JAVASP';
```

#### Étape 4 : validation de la procédure stockée externe
<a name="db2-external-stored-procedures-java-validate"></a>

Procédez comme suit pour tester l’exemple de procédure stockée externe enregistré à l’étape précédente.

**Pour valider la procédure stockée externe**

1. Créez une table comme `TEST.TEST_TABLE` dans l’exemple suivant.

   ```
   db2 "create table TEST.TEST_TABLE(C1 char(6), C2 date)"
   ```

1. Appelez la nouvelle procédure stockée externe. L’appel renvoie un statut de `0`.

   ```
   db2 "call TESTSP.MYJAVASP('test')"
   Return Status = 0
   ```

1. Interrogez la table que vous avez créée à l’étape 1 pour vérifier les résultats de l’appel de procédure stockée.

   ```
   db2 "SELECT * from TEST.TEST_TABLE"
   ```

   La requête produit un résultat similaire à l’exemple suivant :

   ```
   C1     C2
   ------ ----------
   test   02/05/2024
   ```