

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à.

# Esegui la migrazione di funzioni e procedure Oracle con più di 100 argomenti a PostgreSQL
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql"></a>

*Srinivas Potlachervoo, Amazon Web Services*

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

Questo modello mostra come migrare le funzioni e le procedure di Oracle Database con più di 100 argomenti a PostgreSQL. Ad esempio, puoi utilizzare questo modello per migrare le funzioni e le procedure Oracle verso uno dei seguenti servizi di database AWS compatibili con PostgreSQL:
+ Amazon Relational Database Service (Amazon RDS) per PostgreSQL
+ Amazon Aurora PostgreSQL-Compatible Edition

PostgreSQL non supporta funzioni o procedure con più di 100 argomenti. Come soluzione alternativa, puoi definire un nuovo tipo di dati con campi di tipo che corrispondono agli argomenti della funzione di origine. È quindi possibile creare ed eseguire una PL/pgSQL funzione che utilizza il tipo di dati personalizzato come argomento.

## Prerequisiti e limitazioni
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un'[istanza di database Amazon RDS Oracle (DB)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Un'istanza DB [Amazon RDS per PostgreSQL o un'istanza](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/) DB Aurora compatibile con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)

**Versioni del prodotto**
+ Istanza Amazon RDS Oracle DB versioni 10.2 e successive
+ Istanza DB Amazon RDS PostgreSQL 9.4 e successive o istanze DB compatibili con Aurora PostgreSQL versioni 9.4 e successive
+ Oracle SQL Developer versione 18 e successive
+ pGAdmin versione 4 e successive

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

**Stack tecnologico di origine**
+ Istanza Amazon RDS Oracle DB versioni 10.2 e successive

**Stack tecnologico Target**
+ Istanza DB Amazon RDS PostgreSQL 9.4 e successive o istanze DB compatibili con Aurora PostgreSQL versioni 9.4 e successive

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

**Servizi AWS**
+ [Amazon Relational Database Service (Amazon RDS) per PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) ti aiuta a configurare, gestire e scalare un database relazionale PostgreSQL nel cloud AWS.
+ [Amazon Aurora PostgreSQL Compatible Edition è un motore](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) di database relazionale completamente gestito e conforme ad ACID che ti aiuta a configurare, gestire e scalare le distribuzioni PostgreSQL.

**Altri servizi**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) è un ambiente di sviluppo integrato che semplifica lo sviluppo e la gestione dei database Oracle nelle implementazioni tradizionali e basate sul cloud.
+ [pgAdmin](https://www.pgadmin.org/) è uno strumento di gestione open source per PostgreSQL. Fornisce un'interfaccia grafica che consente di creare, gestire e utilizzare oggetti di database. 

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

Assicuratevi che il tipo di dati che create corrisponda ai campi di tipo inclusi nella funzione o procedura Oracle di origine.

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

### Esegui una funzione o una procedura Oracle con più di 100 argomenti
<a name="run-an-oracle-function-or-procedure-that-has-more-than-100-arguments"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea o identifica una Oracle/PLSQL funzione o una procedura esistente con più di 100 argomenti. | Create una Oracle/PLSQL funzione o una procedura con più di 100 argomenti.<br />oppure<br />Identifica una Oracle/PLSQL funzione o una procedura esistente con più di 100 argomenti.<br />Per ulteriori informazioni, vedere le sezioni [14.7 CREATE FUNCTION Statement](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-FUNCTION-statement.html#GUID-B71BC5BD-B87C-4054-AAA5-213E856651F2) e [14.11 CREATE PROCEDURE Statement nella documentazione](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-PROCEDURE-statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54) del database Oracle. | Conoscenza di Oracle/PLSQL | 
| Compilare la funzione o la procedura. Oracle/PLSQL  | Compilare la Oracle/PLSQL funzione o la procedura.<br />Per ulteriori informazioni, vedere [Compilazione di una funzione](https://docs.oracle.com/cd/E37097_01/doc.42/e35128/GUID-6B7B6F82-616D-4915-82BE-D4AE7F59CF37.htm#AEUTL165) nella documentazione di Oracle Database. | Conoscenza di Oracle/PLSQL | 
| Esegui la funzione. Oracle/PLSQL  | Esegui la Oracle/PLSQL funzione o la procedura. Quindi, salvate l'output. | Conoscenza di Oracle/PLSQL | 

### Definire un nuovo tipo di dati che corrisponda agli argomenti della funzione o della procedura di origine
<a name="define-a-new-data-type-that-matches-the-source-functionapos-s-or-procedureapos-s-arguments"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Definisci un nuovo tipo di dati in PostgreSQL. | Definisci un nuovo tipo di dati in PostgreSQL che includa tutti gli stessi campi che compaiono negli argomenti della funzione o della procedura Oracle di origine.<br />Per ulteriori informazioni, vedere [CREATE TYPE nella documentazione di](https://www.postgresql.org/docs/current/sql-createtype.html) PostgreSQL. | Conoscenza di PostgreSQL PL/pgSQL  | 

### Crea una funzione PostgreSQL che includa il nuovo argomento TYPE
<a name="create-a-postgresql-function-that-includes-the-new-type-argument"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una funzione PostgreSQL che includa il nuovo tipo di dati. | Crea una funzione PostgreSQL che includa il nuovo argomento. `TYPE`<br />Per esaminare una funzione di esempio, consulta la sezione **Informazioni aggiuntive** di questo modello. | Conoscenza di PostgreSQL PL/pgSQL  | 
| Compila la funzione PostgreSQL. | Compila la funzione in PostgreSQL. Se i nuovi campi del tipo di dati corrispondono agli argomenti della funzione o della procedura di origine, la funzione viene compilata correttamente. | Conoscenza di PostgreSQL PL/pgSQL  | 
| Esegui la funzione PostgreSQL. | Esegui la funzione PostgreSQL. | Conoscenza di PostgreSQL PL/pgSQL  | 

## risoluzione dei problemi
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| La funzione restituisce il seguente errore:<br />**ERRORE: errore di sintassi vicino a ""** <statement> | Assicuratevi che tutte le istruzioni della funzione terminino con un punto e virgola (). `;` | 
| La funzione restituisce il seguente errore:<br />**ERRORE: "" non è una variabile nota** <variable> | Assicurati che la variabile utilizzata nel corpo della funzione sia elencata nella `DECLARE` sezione della funzione. | 

## Risorse correlate
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-resources"></a>
+ [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
+ [CREATE TYPE](https://www.postgresql.org/docs/11/sql-createtype.html) (documentazione PostgreSQL)

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

**Esempio di funzione PostgreSQL che include un argomento 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;
```