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
Erstellt von anuradha chintha (AWS)
Übersicht
Dieses Muster zeigt Ihnen, wie Sie den Fehler vermeiden können, der beim Umgang mit anonymen Blöcken in dynamischen SQL-Anweisungen auftritt. Sie erhalten eine Fehlermeldung, wenn Sie das AWS Schema Conversion Tool verwenden, um eine Oracle-Datenbank in eine Aurora PostgreSQL-Compatible 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
Voraussetzungen
Aktives AWS-Konto
Amazon Relational Database Service (Amazon RDS) für Oracle-DB-Instance
AWS_ORACLE_EXT
Schema (Teil des AWS SCT-Erweiterungspakets) in Ihrer ZieldatenbankAktuelle Version des AWS Schema Conversion Tool (AWS SCT)
und der erforderlichen Treiber
Architektur
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.

Das Diagramm zeigt den folgenden Workflow:
Generieren Sie einen AWS SCT-Bericht für die Quelldatenbank, indem Sie Aurora PostgreSQL als Zieldatenbank verwenden.
Identifizieren Sie den anonymen Block im Dynamic SQL-Codeblock (für den AWS SCT den Fehler ausgelöst hat).
Konvertieren Sie den Codeblock manuell und stellen Sie den Code in einer Zieldatenbank bereit.
Tools
AWS-Services
Amazon Aurora PostgreSQL-Compatible Edition 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 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)
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
ermöglicht es Ihnen, eine Verbindung zu Ihrem Datenbankserver herzustellen und mit ihm zu interagieren. Oracle SQL Developer
ist eine integrierte Entwicklungsumgebung, mit der Sie Datenbanken in Oracle Database entwickeln und verwalten können. Sie können entweder SQL *Plus oder Oracle SQL Developer für dieses Muster verwenden.
Epen
Aufgabe | Beschreibung | 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 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 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. | 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 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 in der Amazon RDS-Dokumentation. | DBA |
Aufgabe | Beschreibung | 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 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 | 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 | DBA |
Aufgabe | Beschreibung | 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 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? 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 im AWS Schema Conversion Tool User Guide. | DBA |
Aufgabe | Beschreibung | 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, für die eine manuelle Konvertierung erforderlich ist. | DBA |
Aktualisiere das Skript. | Aktualisieren Sie die SQL-Datei manuell. | DBA |
Zugehörige Ressourcen
Zusätzliche Informationen
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 ;
$$