

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Stored procedure esterne per Amazon RDS per Db2
<a name="db2-external-stored-procedures"></a>

Puoi creare routine esterne e registrarle nei tuoi database Amazon RDS per Db2 come stored procedure esterne. Attualmente, RDS per Db2 supporta solo routine basate su Java per le stored procedure esterne.

## Stored procedure esterne basate su Java
<a name="db2-external-stored-procedures-java"></a>

Le stored procedure esterne basate su Java sono routine Java esterne registrate nel database RDS per Db2 come stored procedure esterne.

**Topics**
+ [Limitazioni per le stored procedure esterne basate su Java](#db2-external-stored-procedures-java-limitations)
+ [Configurazione di stored procedure esterne basate su Java](#db2-external-stored-procedures-java-configuring)

### Limitazioni per le stored procedure esterne basate su Java
<a name="db2-external-stored-procedures-java-limitations"></a>

Prima di sviluppare una routine esterna, considera le seguenti limitazioni e restrizioni.

Per creare una routine esterna, assicurati di utilizzare il Java Development Kit (JDK) fornito da Db2. Per ulteriori informazioni, consulta [Java software support for Db2 database products](https://www.ibm.com/docs/en/db2/11.5?topic=servers-java-software-support-db2-database-products).

Il tuo programma Java può creare file solo nella directory `/tmp` e Amazon RDS non supporta l’abilitazione delle autorizzazioni di esecuzione o Set User ID (SUID) su questi file. Inoltre, il tuo programma Java non può utilizzare le chiamate di sistema socket o le seguenti chiamate di sistema:
+ \$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

Per ulteriori restrizioni sulle routine esterne per Db2, consulta [Restrictions on external routines](https://www.ibm.com/docs/en/db2/11.5?topic=routines-restrictions-external) nella documentazione di IBM Db2.

### Configurazione di stored procedure esterne basate su Java
<a name="db2-external-stored-procedures-java-configuring"></a>

Per configurare una stored procedure esterna, crea un file .jar con la routine esterna, installalo nel database RDS per Db2, quindi registralo come stored procedure esterna.

**Topics**
+ [Fase 1: abilitare le stored procedure esterne](#db2-external-stored-procedures-java-enable)
+ [Fase 2: installare il file .jar con la routine esterna](#db2-external-stored-procedures-java-install-jar)
+ [Fase 3: registrare la stored procedure esterna](#db2-external-stored-procedures-java-register)
+ [Fase 4: convalidare la stored procedure esterna](#db2-external-stored-procedures-java-validate)

#### Fase 1: abilitare le stored procedure esterne
<a name="db2-external-stored-procedures-java-enable"></a>

Per abilitare le stored procedure esterne, in un gruppo di parametri associato all’istanza database, imposta il parametro `db2_alternate_authz_behaviour` su uno dei seguenti valori:
+ `EXTERNAL_ROUTINE_DBADM`: concede implicitamente l’autorizzazione `CREATE_EXTERNAL_ROUTINE` a qualsiasi utente, gruppo o ruolo con l’autorità `DBADM`.
+ `EXTERNAL_ROUTINE_DBAUTH`: consente a un utente con l’autorità `DBADM` di concedere l’autorizzazione `CREATE_EXTERNAL_ROUTINE` a qualsiasi utente, gruppo o ruolo. In questo caso, a nessun utente, gruppo o ruolo viene implicitamente concessa questa autorizzazione, nemmeno a un utente con l’autorità`DBADM`.

Per ulteriori informazioni su questa impostazione, consulta [GRANT (database authorities) statement](https://www.ibm.com/docs/en/db2/11.5?topic=statements-grant-database-authorities) nella documentazione di IBM Db2.

Puoi creare e modificare un’istanza database utilizzando la Console di gestione AWS, la AWS CLI o l’API Amazon RDS.

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

**Per configurare il parametro db2\$1alternate\$1authz\$1behaviour in un gruppo di parametri personalizzato**

1. Se desideri utilizzare un gruppo di parametri di database personalizzato diverso da quello utilizzato dall’istanza database, crea un nuovo gruppo di parametri di database. Se utilizzi il modello BYOL (bring your own license), assicurati che il nuovo gruppo di parametri personalizzati includa il. IBM IDs Per informazioni su questi IDs, consulta. [IBM IDs per portare la propria licenza (BYOL) per Db2](db2-licensing.md#db2-prereqs-ibm-info) Per ulteriori informazioni sulla creazione di un gruppo di parametri database, consulta [Creazione di un gruppo di parametri database in Amazon RDS](USER_WorkingWithParamGroups.Creating.md).

1. Imposta il valore per il parametro `db2_alternate_authz_behaviour` nel tuo gruppo di parametri personalizzato. Per ulteriori informazioni sulla modifica di un gruppo di parametri, consulta [Modifica dei parametri in un gruppo di parametri database in Amazon RDS](USER_WorkingWithParamGroups.Modifying.md).

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

**Per configurare il parametro db2\$1alternate\$1authz\$1behaviour in un gruppo di parametri personalizzato**

1. Se desideri utilizzare un gruppo di parametri di database personalizzato diverso da quello utilizzato dall’istanza database, crea un gruppo di parametri di database eseguendo il comando [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). Se utilizzi il modello Bring your own license (BYOL), assicurati che il nuovo gruppo di parametri personalizzati includa il. IBM IDs Per informazioni su questi IDs, consulta. [IBM IDs per portare la propria licenza (BYOL) per Db2](db2-licensing.md#db2-prereqs-ibm-info)

   Includi le seguenti opzioni obbligatorie:
   + `--db-parameter-group-name`: un nome per il gruppo di parametri che stai creando.
   + `--db-parameter-group-family`: l’edizione e la versione principale del motore Db2. I valori validi sono `db2-se-11.5` e `db2-ae-11.5`. 
   + `--description`: una descrizione di questo gruppo di parametri.

   Per ulteriori informazioni sulla creazione di un gruppo di parametri database, consulta [Creazione di un gruppo di parametri database in Amazon RDS](USER_WorkingWithParamGroups.Creating.md).

   L’esempio seguente mostra come creare un gruppo di parametri personalizzato denominato `MY_EXT_SP_PARAM_GROUP` per la famiglia di gruppi di parametri`db2-se-11.5`.

   Per Linux, macOS o 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"
   ```

   Per 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. Modifica il parametro `db2_alternate_authz_behaviour` nel gruppo di parametri personalizzato eseguendo il comando [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).

   Includi le seguenti opzioni obbligatorie:
   + `--db-parameter-group-name`: il nome del gruppo di parametri creato.
   + `--parameters`: un array di nomi di parametri, valori e metodi di applicazione per l’aggiornamento del parametro.

   Per ulteriori informazioni sulla modifica di un gruppo di parametri, consulta [Modifica dei parametri in un gruppo di parametri database in Amazon RDS](USER_WorkingWithParamGroups.Modifying.md).

   L’esempio seguente mostra come modificare il gruppo di parametri `MY_EXT_SP_PARAM_GROUP` impostando il valore di `db2_alternate_authz_behaviour` su `EXTERNAL_ROUTINE_DBADM`.

   Per Linux, macOS o 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"
   ```

   Per 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>

**Per configurare il parametro db2\$1alternate\$1authz\$1behaviour in un gruppo di parametri personalizzato**

1. Se desideri utilizzare un gruppo di parametri di database personalizzato diverso da quello utilizzato dall’istanza database, crea un nuovo gruppo di parametri di database utilizzando l’operazione [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBParameterGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBParameterGroup.html) dell’API Amazon RDS. Se utilizzi il modello Bring your own license (BYOL), assicurati che il nuovo gruppo di parametri personalizzati includa il. IBM Db2 IDs Per informazioni su questi IDs, consulta. [IBM IDs per portare la propria licenza (BYOL) per Db2](db2-licensing.md#db2-prereqs-ibm-info)

   Includi i parametri obbligatori seguenti:
   + `DBParameterGroupName`
   + `DBParameterGroupFamily`
   + `Description`

   Per ulteriori informazioni sulla creazione di un gruppo di parametri database, consulta [Creazione di un gruppo di parametri database in Amazon RDS](USER_WorkingWithParamGroups.Creating.md).

1. Modifica il parametro `db2_alternate_authz_behaviour` nel gruppo di parametri personalizzato che hai creato utilizzando l’operazione [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBParameterGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBParameterGroup.html) dell’API RDS.

   Includi i parametri obbligatori seguenti:
   + `DBParameterGroupName`
   + `Parameters`

   Per ulteriori informazioni sulla modifica di un gruppo di parametri, consulta [Modifica dei parametri in un gruppo di parametri database in Amazon RDS](USER_WorkingWithParamGroups.Modifying.md).

#### Fase 2: installare il file .jar con la routine esterna
<a name="db2-external-stored-procedures-java-install-jar"></a>

Dopo aver creato la routine Java, crea il file .jar ed esegui `db2 "call sqlj.install_jar('file:file_path',jar_ID)"` per installarlo nel database RDS per Db2.

L’esempio seguente mostra come creare una routine Java e installarla su un database RDS per Db2. L’esempio include un codice di esempio per una semplice routine da utilizzare per testare il processo. In questo esempio si presume quanto segue:
+ Il codice Java viene compilato su un server in cui è installato Db2. Si tratta di una best practice perché la mancata compilazione con il JDK fornito da IBM può causare errori imprevisti.
+ Il database RDS per Db2 è catalogato localmente sul server.

Se desideri provare il processo con il seguente codice di esempio, copialo e salvalo in un file denominato `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;
}
}
```

Il comando seguente compila la routine Java.

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

Il comando seguente crea il file .jar.

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

I comandi seguenti effettuano la connessione al database denominato `MY_DB2_DATABASE` e installano il file .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()"
```

#### Fase 3: registrare la stored procedure esterna
<a name="db2-external-stored-procedures-java-register"></a>

Dopo aver installato il file .jar nel database RDS per Db2, registralo come stored procedure eseguendo il comando `db2 CREATE PROCEDURE` o `db2 REPLACE PROCEDURE`.

L’esempio seguente mostra come connettersi al database e registrare la routine Java creata nel passaggio precedente come stored procedure.

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

#### Fase 4: convalidare la stored procedure esterna
<a name="db2-external-stored-procedures-java-validate"></a>

Utilizza la procedura seguente per testare la stored procedure esterna di esempio che è stata registrata nel passaggio precedente.

**Per convalidare la stored procedure esterna**

1. Crea una tabella come `TEST.TEST_TABLE` nell’esempio seguente.

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

1. Chiama la nuova stored procedure esterna. La chiamata restituisce lo stato `0`.

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

1. Esegui una query sulla tabella creata nel passaggio 1 per verificare i risultati della chiamata alla stored procedure.

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

   La query produce un output simile all’esempio seguente:

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