Gestisci blocchi anonimi nelle istruzioni SQL dinamiche in Aurora PostgreSQL - Prontuario AWS

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

Gestisci blocchi anonimi nelle istruzioni SQL dinamiche in Aurora PostgreSQL

Creato da anuradha chintha (AWS)

Ambiente: PoC o pilota

Fonte: Database Relational

Obiettivo: PostgreSQL

Tipo R: Re-architect

Carico di lavoro: Oracle; open source

Tecnologie: database; migrazione

Servizi AWS: Amazon Aurora; Amazon RDS

Riepilogo

Questo modello mostra come evitare l'errore che si verifica quando si gestiscono blocchi anonimi nelle istruzioni SQL dinamiche. Ricevi un messaggio di errore quando utilizzi AWS Schema Conversion Tool per convertire un database Oracle in un database Edition compatibile con Aurora PostgreSQL. Per evitare l'errore, devi conoscere il valore di una variabile OUT bind, ma puoi conoscere il valore di una variabile OUT bind solo dopo aver eseguito l'istruzione SQL. L'errore deriva dal fatto che AWS Schema Conversion Tool (AWS SCT) non comprende la logica all'interno dell'istruzione Dynamic SQL. AWS SCT non è in grado di convertire l'istruzione SQL dinamica in codice PL/SQL (ovvero funzioni, procedure e pacchetti).

Prerequisiti e limitazioni

Prerequisiti

Architettura

Stack tecnologico di origine

  • Oracle Database 10g locale e versione successiva

Stack tecnologico Target

  • Amazon Aurora PostgreSQL

  • Amazon RDS per PostgreSQL

  • Strumento di conversione dello schema AWS (AWS SCT)

Architettura di migrazione

Il diagramma seguente mostra come utilizzare le variabili di OUT associazione AWS SCT e Oracle per scansionare il codice dell'applicazione alla ricerca di istruzioni SQL incorporate e convertire il codice in un formato compatibile utilizzabile da un database Aurora.

Diagramma di architettura per l'utilizzo delle variabili di associazione AWS SCT e Oracle OUT

Il diagramma mostra il flusso di lavoro seguente:

  1. Genera un report AWS SCT per il database di origine utilizzando Aurora PostgreSQL come database di destinazione.

  2. Identifica il blocco anonimo nel blocco di codice SQL dinamico (per il quale AWS SCT ha generato l'errore).

  3. Converti il blocco di codice manualmente e distribuisci il codice su un database di destinazione.

Strumenti

Servizi AWS

Altri strumenti

  • pgAdmin consente di connettersi e interagire con il server di database.

  • Oracle SQL Developer è un ambiente di sviluppo integrato che è possibile utilizzare per sviluppare e gestire database in Oracle Database. È possibile utilizzare SQL *Plus o Oracle SQL Developer per questo modello.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea un'istanza Oracle su Amazon RDS o Amazon EC2.

Per creare un'istanza DB Oracle su Amazon RDS, consulta Creazione di un'istanza DB Oracle e connessione a un database su un'istanza Oracle DB nella documentazione di Amazon RDS.

Per creare un'istanza DB Oracle su Amazon Elastic Compute Cloud (Amazon EC2), consulta Amazon EC2 per Oracle nella documentazione di AWS Prescriptive Guidance.

DBA

Crea uno schema di database e oggetti per la migrazione.

Puoi usare Amazon Cloud Directory per creare uno schema di database. Per ulteriori informazioni, consulta Create a Schema nella documentazione di Cloud Directory.

DBA

Configura i gruppi di sicurezza in entrata e in uscita.

Per creare e configurare gruppi di sicurezza, consulta Controllare l'accesso con i gruppi di sicurezza nella documentazione di Amazon RDS.

DBA

Conferma che il database sia in esecuzione.

Per verificare lo stato del database, consulta Visualizzazione degli eventi di Amazon RDS nella documentazione di Amazon RDS.

DBA
AttivitàDescrizioneCompetenze richieste

Crea un'istanza Aurora PostgreSQL in Amazon RDS.

Per creare un'istanza Aurora PostgreSQL, consulta Creazione di un cluster DB e connessione a un database su un cluster Aurora PostgreSQL DB nella documentazione di Amazon RDS.

DBA

Configura un gruppo di sicurezza in entrata e in uscita.

Per creare e configurare gruppi di sicurezza, consulta Fornire l'accesso al cluster DB nel VPC creando un gruppo di sicurezza nella documentazione di Aurora.

DBA

Verifica che il database Aurora PostgreSQL sia in esecuzione.

Per verificare lo stato del database, consulta Visualizzazione degli eventi di Amazon RDS nella documentazione di Aurora.

DBA
AttivitàDescrizioneCompetenze richieste

Connect AWS SCT al database di origine.

Per connettere AWS SCT al tuo database di origine, consulta Connessione a PostgreSQL come sorgente nella documentazione di AWS SCT.

DBA

Connect AWS SCT al database di destinazione.

Per connettere AWS SCT al tuo database di destinazione, consulta What is the AWS Schema Conversion Tool? nella Guida per l'utente di AWS Schema Conversion Tool.

DBA

Converti lo schema del database in AWS SCT e salva il codice convertito automaticamente come file SQL.

Per salvare i file convertiti da AWS SCT, consulta Salvare e applicare lo schema convertito in AWS SCT nella Guida per l'utente di AWS Schema Conversion Tool.

DBA
AttivitàDescrizioneCompetenze richieste

Scarica il file SQL per la conversione manuale.

Nel file convertito da AWS SCT, estrai il file SQL che richiede la conversione manuale.

DBA

Aggiorna lo script.

Aggiorna manualmente il file SQL.

DBA

Risorse correlate

Informazioni aggiuntive

Il codice di esempio seguente mostra come configurare il database di origine Oracle:

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;

Il codice di esempio seguente mostra come configurare il database di destinazione Aurora PostgreSQL:

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