

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración de funciones y procedimientos de Oracle con más de 100 argumentos a PostgreSQL
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql"></a>

*Srinivas Potlachervoo, Amazon Web Services*

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

Este patrón muestra cómo migrar funciones y procedimientos de Oracle Database que tienen más de 100 argumentos a PostgreSQL. Por ejemplo, puede usar este patrón para migrar funciones y procedimientos de Oracle a uno de los siguientes servicios de bases de datos de AWS compatibles con PostgreSQL:
+ Amazon Relational Database Service (Amazon RDS) para PostgreSQL
+ Edición de Amazon Aurora compatible con PostgreSQL

PostgreSQL no admite funciones o procedimientos que tengan más de 100 argumentos. Como solución alternativa, puede definir un nuevo tipo de datos cuyos campos de tipo coincidan con los argumentos de la función de origen. A continuación, puede crear y ejecutar una PL/pgSQL función que utilice el tipo de datos personalizado como argumento.

## Requisitos previos y limitaciones
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Una [instancia de base de datos (DB) Oracle de Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ Una [instancia de base de datos Amazon RDS para PostgreSQL](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/) o una [instancia de base de datos Aurora compatible con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)

**Versiones de producto**
+ Instancia de base de datos de Oracle de Amazon RDS, versión 10.2 y posteriores
+ Instancia de base de datos Amazon RDS PostgreSQL, versión 9.4 y posteriores, o instancia de base de datos Aurora compatible con PostgreSQL, versión 9.4 y posteriores
+ Oracle SQL Developer versión 18 y posteriores
+ pgAdmin versión 4 y posteriores

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

**Pila de tecnología de origen**
+ Instancia de base de datos de Oracle de Amazon RDS, versión 10.2 y posteriores

**Pila de tecnología de destino**
+ Instancia de base de datos Amazon RDS PostgreSQL, versión 9.4 y posteriores, o instancia de base de datos Aurora compatible con PostgreSQL, versión 9.4 y posteriores

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

**Servicios de AWS**
+ [Amazon Relational Database Service (Amazon RDS) para PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) le ayuda a configurar, utilizar y escalar una base de datos relacional de PostgreSQL en la nube de AWS.
+ La [edición de Amazon Aurora compatible con PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) es un motor de base de datos relacional compatible con ACID, completamente administrado que le permite configurar, utilizar y escalar implementaciones de PostgreSQL.

**Otros servicios**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) es un entorno de desarrollo integrado que simplifica el desarrollo y la administración de bases de datos de Oracle, tanto en implementaciones tradicionales como en implementaciones basadas en la nube.
+ [pgAdmin](https://www.pgadmin.org/) es una herramienta de gestión de código abierto para PostgreSQL. Proporciona una interfaz gráfica que permite crear, mantener y utilizar objetos de bases de datos. 

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

Asegúrese de que el tipo de datos creado coincida con los campos de tipos que se incluyen en la función o procedimiento de Oracle de origen.

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

### Ejecute una función o procedimiento de Oracle con más de 100 argumentos
<a name="run-an-oracle-function-or-procedure-that-has-more-than-100-arguments"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree o identifique una Oracle/PLSQL función o procedimiento existente que tenga más de 100 argumentos. | Cree una Oracle/PLSQL función o un procedimiento que tenga más de 100 argumentos.-o bien-Identifique una Oracle/PLSQL función o un procedimiento existente que tenga más de 100 argumentos.Para obtener más información, consulte las secciones [14.7 Instrucción CREATE FUNCTION](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-FUNCTION-statement.html#GUID-B71BC5BD-B87C-4054-AAA5-213E856651F2) y [14.11 Instrucción CREATE PROCEDURE](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-PROCEDURE-statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54) de la documentación de bases de datos de Oracle. | Conocimientos de Oracle/PL/SQL | 
| Compila la Oracle/PLSQL función o el procedimiento. | Compila la Oracle/PLSQL función o el procedimiento.Para más información, consulte [Compilación de una función](https://docs.oracle.com/cd/E37097_01/doc.42/e35128/GUID-6B7B6F82-616D-4915-82BE-D4AE7F59CF37.htm#AEUTL165) en la documentación de la base de datos de Oracle. | Conocimientos de Oracle/PL/SQL | 
| Ejecute la Oracle/PLSQL función. | Ejecute la Oracle/PLSQL función o el procedimiento. A continuación, guarde el resultado. | Conocimientos de Oracle/PL/SQL | 

### Defina un nuevo tipo de datos que coincida con los argumentos de la función o procedimiento de origen
<a name="define-a-new-data-type-that-matches-the-source-functionapos-s-or-procedureapos-s-arguments"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Defina un nuevo tipo de datos en PostgreSQL. | Defina un nuevo tipo de datos en PostgreSQL que incluya todos los campos que aparecen en los argumentos de la función o procedimiento de Oracle de origen.Para obtener más información, consulte [CREATE TYPE](https://www.postgresql.org/docs/current/sql-createtype.html) en la documentación de PostgreSQL. | Conocimientos de PostgreSQL PL/pgSQL  | 

### Cree una función de PostgreSQL que incluya el nuevo argumento TYPE
<a name="create-a-postgresql-function-that-includes-the-new-type-argument"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una función de PostgreSQL que incluya el nuevo tipo de datos. | Crear una función de PostgreSQL que incluya el nuevo argumento `TYPE`.Para ver un ejemplo de función, consulte la sección de **Información adicional** de este patrón. | Conocimientos de PostgreSQL PL/pgSQL  | 
| Compile la función PostgreSQL. | Compile la función en PostgreSQL. Si los campos del nuevo tipo de datos coinciden con los argumentos de la función o procedimiento de origen, la función se compilará correctamente. | Conocimientos de PostgreSQL PL/pgSQL  | 
| Ejecute la función de PostgreSQL. | Ejecute la función de PostgreSQL. | Conocimientos de PostgreSQL PL/pgSQL  | 

## Resolución de problemas
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La función devuelve el siguiente error:**ERROR: syntax error near "<statement>"** | Asegúrese de que todas las instrucciones de la función terminen con punto y coma (`;`). | 
| La función devuelve el siguiente error:**ERROR: "<variable>" is not a known variable** | Asegúrese de que la variable empleada en el cuerpo de la función aparezca en la sección `DECLARE` de la función. | 

## Recursos relacionados
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-resources"></a>
+ [Uso de Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) (*Guía del usuario de Amazon Aurora para Aurora*)
+ [CREATE TYPE](https://www.postgresql.org/docs/11/sql-createtype.html) (documentación de PostgreSQL)

## Información adicional
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-additional"></a>

**Ejemplo de función PostgreSQL que incluye un argumento 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;
```