

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Migrieren Sie Oracle-Funktionen und -Prozeduren mit mehr als 100 Argumenten nach PostgreSQL
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql"></a>

*Srinivas Potlachervoo, Amazon Web Services*

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

Dieses Muster zeigt, wie Oracle-Datenbankfunktionen und -prozeduren mit mehr als 100 Argumenten nach PostgreSQL migriert werden. Sie können dieses Muster beispielsweise verwenden, um Oracle-Funktionen und -Prozeduren auf einen der folgenden PostgreSQL-kompatiblen AWS-Datenbankservices zu migrieren:
+ Amazon Relational Database Service (Amazon RDS) für PostgreSQL
+ Amazon Aurora PostgreSQL-Compatible Edition

PostgreSQL unterstützt keine Funktionen oder Prozeduren mit mehr als 100 Argumenten. Um das Problem zu umgehen, können Sie einen neuen Datentyp definieren, der Typfelder enthält, die den Argumenten der Quellfunktion entsprechen. Anschließend können Sie eine PL/pgSQL Funktion erstellen und ausführen, die den benutzerdefinierten Datentyp als Argument verwendet.

## Voraussetzungen und Einschränkungen
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Eine [Amazon RDS-Oracle-Datenbank-Instance (DB)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ Eine [Amazon RDS for PostgreSQL PostgreSQL-DB-Instance](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/) oder eine [Aurora PostgreSQL-kompatible](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html) DB-Instance

**Produktversionen**
+ Amazon RDS Oracle DB-Instance-Versionen 10.2 und höher
+ Amazon RDS PostgreSQL-DB-Instance-Versionen 9.4 und höher oder Aurora PostgreSQL-kompatible DB-Instance-Versionen 9.4 und höher
+ Oracle SQL Developer Version 18 und höher
+ pgAdmin Version 4 und höher

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

**Quelltechnologie-Stack**
+ Amazon RDS Oracle DB-Instance-Versionen 10.2 und höher

**Zieltechnologie-Stack**
+ Amazon RDS PostgreSQL-DB-Instance-Versionen 9.4 und höher oder Aurora PostgreSQL-kompatible DB-Instance-Versionen 9.4 und höher

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

**AWS-Services**
+ [Amazon Relational Database Service (Amazon RDS) für PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) unterstützt Sie bei der Einrichtung, dem Betrieb und der Skalierung einer relationalen PostgreSQL-Datenbank in der AWS-Cloud.
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) ist eine vollständig verwaltete, ACID-konforme relationale Datenbank-Engine, die Sie bei der Einrichtung, dem Betrieb und der Skalierung von PostgreSQL-Bereitstellungen unterstützt.

**Andere Dienste**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) ist eine integrierte Entwicklungsumgebung, die die Entwicklung und Verwaltung von Oracle-Datenbanken sowohl in herkömmlichen als auch in Cloud-basierten Bereitstellungen vereinfacht.
+ [pgAdmin](https://www.pgadmin.org/) ist ein Open-Source-Verwaltungstool für PostgreSQL. Es bietet eine grafische Oberfläche, mit der Sie Datenbankobjekte erstellen, verwalten und verwenden können. 

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

Stellen Sie sicher, dass der Datentyp, den Sie erstellen, mit den Typfeldern übereinstimmt, die in der Oracle-Quellfunktion oder -prozedur enthalten sind.

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

### Führen Sie eine Oracle-Funktion oder -Prozedur mit mehr als 100 Argumenten aus
<a name="run-an-oracle-function-or-procedure-that-has-more-than-100-arguments"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen oder identifizieren Sie eine bestehende Oracle/PLSQL Funktion oder Prozedur mit mehr als 100 Argumenten. | Erstellen Sie eine Oracle/PLSQL Funktion oder Prozedur mit mehr als 100 Argumenten.<br />–oder–<br />Identifizieren Sie eine vorhandene Oracle/PLSQL Funktion oder Prozedur mit mehr als 100 Argumenten.<br />Weitere Informationen finden Sie in den Abschnitten [14.7 CREATE FUNCTION-Anweisung](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-FUNCTION-statement.html#GUID-B71BC5BD-B87C-4054-AAA5-213E856651F2) und [14.11 CREATE PROCEDURE-Anweisung](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-PROCEDURE-statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54) in der Oracle-Datenbankdokumentation. | Oracle/PLSQL-Kenntnisse | 
| Kompilieren Sie die Funktion oder Prozedur Oracle/PLSQL . | Kompilieren Sie die Oracle/PLSQL Funktion oder Prozedur.<br />Weitere Informationen finden Sie unter [Funktion kompilieren](https://docs.oracle.com/cd/E37097_01/doc.42/e35128/GUID-6B7B6F82-616D-4915-82BE-D4AE7F59CF37.htm#AEUTL165) in der Oracle Database-Dokumentation. | Oracle/PLSQL-Kenntnisse | 
| Führen Sie die Funktion aus. Oracle/PLSQL  | Führen Sie die Oracle/PLSQL Funktion oder Prozedur aus. Speichern Sie dann die Ausgabe. | Oracle/PLSQL-Kenntnisse | 

### Definieren Sie einen neuen Datentyp, der den Argumenten der Quellfunktion oder -prozedur entspricht
<a name="define-a-new-data-type-that-matches-the-source-functionapos-s-or-procedureapos-s-arguments"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Definieren Sie einen neuen Datentyp in PostgreSQL. | Definieren Sie einen neuen Datentyp in PostgreSQL, der dieselben Felder enthält, die in den Argumenten der Oracle-Quellfunktion oder -prozedur vorkommen.<br />Weitere Informationen finden Sie unter [CREATE TYPE](https://www.postgresql.org/docs/current/sql-createtype.html) in der PostgreSQL-Dokumentation. | PostgreSQL-Kenntnisse PL/pgSQL  | 

### Erstellen Sie eine PostgreSQL-Funktion, die das neue TYPE-Argument enthält
<a name="create-a-postgresql-function-that-includes-the-new-type-argument"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine PostgreSQL-Funktion, die den neuen Datentyp enthält. | Erstellen Sie eine PostgreSQL-Funktion, die das neue `TYPE` Argument enthält.<br />Eine Beispielfunktion finden Sie im Abschnitt **Zusätzliche Informationen** dieses Musters. | PostgreSQL-Kenntnisse PL/pgSQL  | 
| Kompilieren Sie die PostgreSQL-Funktion. | Kompilieren Sie die Funktion in PostgreSQL. Wenn die neuen Datentypfelder mit den Argumenten der Quellfunktion oder -prozedur übereinstimmen, wird die Funktion erfolgreich kompiliert. | PostgreSQL-Kenntnisse PL/pgSQL  | 
| Führen Sie die PostgreSQL-Funktion aus. | Führen Sie die PostgreSQL-Funktion aus. | PostgreSQL-Kenntnisse PL/pgSQL  | 

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


| Problem | Lösung | 
| --- | --- | 
| Die Funktion gibt den folgenden Fehler zurück:<br />**FEHLER: Syntaxfehler in der Nähe von ""** <statement> | Stellen Sie sicher, dass alle Anweisungen der Funktion mit einem Semikolon () enden. `;` | 
| Die Funktion gibt den folgenden Fehler zurück:<br />**FEHLER: "" ist keine bekannte Variable** <variable> | Stellen Sie sicher, dass die Variable, die im Funktionshauptteil verwendet wird, im `DECLARE` Abschnitt der Funktion aufgeführt ist. | 

## Zugehörige Ressourcen
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-resources"></a>
+ [Arbeiten mit Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) (*Amazon Aurora Aurora-Benutzerhandbuch für Aurora*)
+ [CREATE TYPE](https://www.postgresql.org/docs/11/sql-createtype.html) (PostgreSQL-Dokumentation)

## Zusätzliche Informationen
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-additional"></a>

**Beispiel für eine PostgreSQL-Funktion, die ein TYPE-Argument enthält**

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