

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.

# Behandeln Sie anonyme Blöcke in dynamischen SQL-Anweisungen in Aurora PostgreSQL
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*anuradha chintha, Amazon Web Services*

## Zusammenfassung
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-summary"></a>

Hinweis: Amazon Cloud Directory steht Neukunden nicht mehr zur Verfügung. Alternativen zu Cloud Directory finden Sie in [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) und [Amazon](https://aws.amazon.com/neptune/) Neptune. Wenn Sie Hilfe bei der Auswahl der richtigen Alternative für Ihren Anwendungsfall benötigen oder weitere Fragen haben, wenden Sie sich an. [AWS Support](https://aws.amazon.com/support/)

Dieses Muster zeigt Ihnen, wie Sie Fehler vermeiden können, die beim Umgang mit anonymen Blöcken in dynamischen SQL-Anweisungen auftreten. Sie erhalten eine Fehlermeldung, wenn Sie das AWS Schema Conversion Tool verwenden, um eine Oracle-Datenbank in eine Aurora PostgreSQL-kompatible Edition-Datenbank zu konvertieren. Um den Fehler zu vermeiden, müssen Sie den Wert einer `OUT` Bind-Variablen kennen, aber Sie können den Wert einer `OUT` Bind-Variablen erst kennen, nachdem Sie die SQL-Anweisung ausgeführt haben. Der Fehler ist darauf zurückzuführen, dass das AWS Schema Conversion Tool (AWS SCT) die Logik in der Dynamic SQL-Anweisung nicht versteht. AWS SCT kann die dynamische SQL-Anweisung nicht in PL/SQL Code (d. h. Funktionen, Prozeduren und Pakete) konvertieren.

## Voraussetzungen und Einschränkungen
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**Voraussetzungen**
+ Aktives AWS-Konto
+ [Aurora PostgreSQL-Datenbank-Instance (DB)](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Amazon Relational Database Service (Amazon RDS) für Oracle-DB-Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Interaktives PostgreSQL-Terminal (psql)](https://www.postgresql.org/docs/current/app-psql.html)
+ [SQL\$1Plus](https://docs.oracle.com/cd/B14117_01/server.101/b12170/qstart.htm)
+ `AWS_ORACLE_EXT`Schema (Teil des [AWS SCT-Erweiterungspakets](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)) in Ihrer Zieldatenbank
+ Aktuelle Version des [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) und der erforderlichen Treiber

## Architektur
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-architecture"></a>

**Quelltechnologie-Stack**
+ Lokale Oracle-Datenbank 10g und neuere Version

**Zieltechnologie-Stack**
+ Amazon Aurora PostgreSQL
+ Amazon RDS für PostgreSQL
+ AWS-Schemakonvertierungstool (AWS SCT)

**Architektur der Migration**

Das folgende Diagramm zeigt, wie Sie AWS SCT- und `OUT` Oracle-Bind-Variablen verwenden, um Ihren Anwendungscode nach Embedded SQL-Anweisungen zu scannen und den Code in ein kompatibles Format zu konvertieren, das eine Aurora-Datenbank verwenden kann.

![\[Architekturdiagramm für die Verwendung von AWS SCT- und Oracle OUT-Bind-Variablen\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


Das Diagramm zeigt den folgenden Workflow:

1. Generieren Sie einen AWS SCT-Bericht für die Quelldatenbank, indem Sie Aurora PostgreSQL als Zieldatenbank verwenden.

1. Identifizieren Sie den anonymen Block im Dynamic SQL-Codeblock (für den AWS SCT den Fehler ausgelöst hat).

1. Konvertieren Sie den Codeblock manuell und stellen Sie den Code in einer Zieldatenbank bereit.

## Tools
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-tools"></a>

**AWS-Services**
+ [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.
+ [Amazon Relational Database Service (Amazon RDS) für Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) unterstützt Sie bei der Einrichtung, dem Betrieb und der Skalierung einer relationalen Oracle-Datenbank in der AWS-Cloud.
+ Das [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) hilft Ihnen dabei, heterogene Datenbankmigrationen vorhersehbar zu machen, indem das Quelldatenbankschema und ein Großteil der Datenbankcode-Objekte automatisch in ein mit der Zieldatenbank kompatibles Format konvertiert werden.

**Andere Tools**
+ [pgAdmin](https://www.pgadmin.org/) ermöglicht es Ihnen, eine Verbindung zu Ihrem Datenbankserver herzustellen und mit ihm zu interagieren.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) ist eine integrierte Entwicklungsumgebung, mit der Sie Datenbanken in Oracle Database entwickeln und verwalten können. Sie können entweder [SQL \$1Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) oder Oracle SQL Developer für dieses Muster verwenden.

## Epen
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-epics"></a>

### Konfigurieren Sie die Oracle-Quelldatenbank
<a name="configure-the-oracle-source-database"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Oracle-Instanz auf Amazon RDS oder Amazon EC2. | Informationen zum Erstellen einer Oracle-DB-Instance auf Amazon RDS finden Sie unter [Eine Oracle-DB-Instance erstellen und eine Verbindung zu einer Datenbank auf einer Oracle-DB-Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html) herstellen in der Amazon RDS-Dokumentation.Informationen zum Erstellen einer Oracle-DB-Instance auf Amazon Elastic Compute Cloud (Amazon EC2) finden Sie unter [Amazon EC2 for Oracle](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html) in der AWS Prescriptive Guidance Guidance-Dokumentation. | DBA | 
| Erstellen Sie ein Datenbankschema und Objekte für die Migration. | Sie können Amazon Cloud Directory verwenden, um ein Datenbankschema zu erstellen. Weitere Informationen finden Sie in der Cloud Directory Directory-Dokumentation unter [Schema erstellen](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html). | DBA | 
| Konfigurieren Sie Sicherheitsgruppen für eingehenden und ausgehenden Datenverkehr. | Informationen zum Erstellen und Konfigurieren von Sicherheitsgruppen finden Sie unter [Steuern des Zugriffs mit Sicherheitsgruppen](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html) in der Amazon RDS-Dokumentation. | DBA | 
| Vergewissern Sie sich, dass die Datenbank läuft. | Informationen zum Überprüfen des Status Ihrer Datenbank finden Sie unter [Amazon RDS-Ereignisse anzeigen](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html) in der Amazon RDS-Dokumentation. | DBA | 

### Konfigurieren Sie die Aurora PostgreSQL-Zieldatenbank
<a name="configure-the-target-aurora-postgresql-database"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine Aurora PostgreSQL-Instance in Amazon RDS. | Informationen zum Erstellen einer Aurora PostgreSQL-Instance finden Sie unter [Erstellen eines DB-Clusters und Herstellen einer Verbindung zu einer Datenbank auf einem Aurora PostgreSQL-DB-Cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html) in der Amazon RDS-Dokumentation. | DBA | 
| Konfigurieren Sie eine Sicherheitsgruppe für eingehenden und ausgehenden Datenverkehr. | Informationen zum Erstellen und Konfigurieren von Sicherheitsgruppen finden Sie in [der Aurora-Dokumentation unter Gewähren des Zugriffs auf den DB-Cluster in der VPC durch Erstellen einer Sicherheitsgruppe](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup). | DBA | 
| Vergewissern Sie sich, dass die Aurora PostgreSQL-Datenbank läuft. | Informationen zum Überprüfen des Status Ihrer Datenbank finden Sie unter [Amazon RDS-Ereignisse anzeigen](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html) in der Aurora-Dokumentation. | DBA | 

### AWS SCT einrichten
<a name="set-up-aws-sct"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Connect AWS SCT mit der Quelldatenbank. | Informationen zur Verbindung von AWS SCT mit Ihrer Quelldatenbank finden Sie unter [Connecting to PostgreSQL as a source](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting) in der AWS SCT-Dokumentation. | DBA | 
| Connect AWS SCT mit der Zieldatenbank. | Informationen zur Verbindung von AWS SCT mit Ihrer Zieldatenbank finden Sie unter [Was ist das AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)? im AWS Schema Conversion Tool-Benutzerhandbuch. | DBA | 
| Konvertieren Sie das Datenbankschema in AWS SCT und speichern Sie den automatisch konvertierten Code als SQL-Datei. | Informationen zum Speichern von mit AWS SCT konvertierten Dateien finden Sie unter [Speichern und Anwenden Ihres konvertierten Schemas in AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply) im AWS Schema Conversion Tool User Guide. | DBA | 

### Migrieren Sie den Code
<a name="migrate-the-code"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Holen Sie sich die SQL-Datei für die manuelle Konvertierung. | Rufen Sie in der von AWS SCT konvertierten Datei die SQL-Datei ab, die manuell konvertiert werden muss. | DBA | 
| Aktualisiere das Skript. | Aktualisieren Sie die SQL-Datei manuell. | DBA | 

## Zugehörige Ressourcen
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Funktionen von Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)

## Zusätzliche Informationen
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

Der folgende Beispielcode zeigt, wie die Oracle-Quelldatenbank konfiguriert wird:

```
CREATE or replace PROCEDURE calc_stats_new1 (
  a NUMBER,
  b NUMBER,
  result out NUMBER)
IS
BEGIN
result:=a+b;
END;
/
```

```
set serveroutput on ;
 
DECLARE
  a NUMBER := 4;
  b NUMBER := 7;
  plsql_block VARCHAR2(100);
  output number;
BEGIN
  plsql_block := 'BEGIN calc_stats_new1(:a, :b,:output); END;';
  EXECUTE IMMEDIATE plsql_block USING a, b,out output;  
  DBMS_OUTPUT.PUT_LINE('output:'||output);
 
END;
```

Der folgende Beispielcode zeigt, wie die Aurora PostgreSQL-Zieldatenbank konfiguriert wird:

```
 w integer,
 x integer)
RETURNS integer
AS
$BODY$
DECLARE
begin
return w + x ;
end;
$BODY$
LANGUAGE  plpgsql;
 
 
CREATE OR REPLACE FUNCTION test_pg.init()
RETURNS void
AS
$BODY$
BEGIN
if aws_oracle_ext.is_package_initialized
      ('test_pg' ) then
      return;
    end if;
    perform aws_oracle_ext.set_package_initialized
      ('test_pg' );
 
PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_output', NULL::INTEGER);
PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_status', NULL::text);
END;
$BODY$
LANGUAGE  plpgsql;
 

DO $$ 
declare
v_sql text;
v_output_loc int; 
a integer :=1;
b integer :=2;
BEGIN 
perform  test_pg.init();
--raise notice 'v_sql %',v_sql;
execute 'do $a$ declare v_output_l int; begin select * from test_pg.calc_stats_new1('||a||','||b||') into v_output_l;
PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_output'', v_output_l) ; end; $a$'  ; 
v_output_loc := aws_oracle_ext.get_package_variable('test_pg', 'v_output');
raise notice 'v_output_loc %',v_output_loc; 
END ; 
$$
```