Menangani blok anonim dalam pernyataan SQL Dinamis di Aurora PostgreSQL - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menangani blok anonim dalam pernyataan SQL Dinamis di Aurora PostgreSQL

Situs web, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara menghindari kesalahan yang Anda dapatkan saat menangani blok anonim dalam pernyataan Dynamic SQL. Anda menerima pesan galat saat menggunakan AWS Schema Conversion Tool untuk mengonversi database Oracle ke database Edisi yang kompatibel dengan Aurora PostgreSQL. Untuk menghindari kesalahan, Anda harus mengetahui nilai variabel OUT bind, tetapi Anda tidak dapat mengetahui nilai variabel OUT bind sampai setelah Anda menjalankan pernyataan SQL. Kesalahan dihasilkan dari AWS Schema Conversion Tool (AWS SCT) yang tidak memahami logika di dalam pernyataan Dynamic SQL. AWS SCT tidak dapat mengonversi pernyataan SQL dinamis dalam PL/SQL kode (yaitu, fungsi, prosedur, dan paket).

Prasyarat dan batasan

Prasyarat

Arsitektur

Tumpukan teknologi sumber

  • Oracle Database 10g lokal dan versi yang lebih baru

Tumpukan teknologi target

  • Amazon Aurora PostgreSQL

  • Amazon RDS for PostgreSQL

  • Alat Konversi Skema AWS (AWS SCT)

Arsitektur migrasi

Diagram berikut menunjukkan cara menggunakan variabel OUT pengikat AWS SCT dan Oracle untuk memindai kode aplikasi Anda untuk pernyataan SQL yang disematkan dan mengonversi kode ke format yang kompatibel yang dapat digunakan database Aurora.

Diagram arsitektur untuk menggunakan variabel pengikat AWS SCT dan Oracle OUT

Diagram menunjukkan alur kerja berikut:

  1. Buat laporan AWS SCT untuk database sumber dengan menggunakan Aurora PostgreSQL sebagai basis data target.

  2. Identifikasi blok anonim di blok kode SQL Dinamis (di mana AWS SCT memunculkan kesalahannya).

  3. Konversi blok kode secara manual dan terapkan kode pada database target.

Alat

Layanan AWS

Alat-alat lainnya

  • pgAdmin memungkinkan Anda untuk terhubung dan berinteraksi dengan server database Anda.

  • Oracle SQL Developer adalah lingkungan pengembangan terintegrasi yang dapat Anda gunakan untuk mengembangkan dan mengelola database di Oracle Database. Anda dapat menggunakan SQL* Plus atau Oracle SQL Developer untuk pola ini.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat instance Oracle di Amazon RDS atau Amazon. EC2

Untuk membuat instans Oracle DB di Amazon RDS, lihat Membuat instans Oracle DB dan menghubungkan ke database pada instans Oracle DB dalam dokumentasi Amazon RDS.

Untuk membuat instans Oracle DB di Amazon Elastic Compute Cloud (Amazon EC2), lihat Amazon EC2 for Oracle di dokumentasi AWS Prescriptive Guidance.

DBA

Buat skema database dan objek untuk migrasi.

Anda dapat menggunakan Amazon Cloud Directory untuk membuat skema database. Untuk informasi selengkapnya, lihat Membuat Skema di dokumentasi Cloud Directory.

DBA

Konfigurasikan grup keamanan masuk dan keluar.

Untuk membuat dan mengonfigurasi grup keamanan, lihat Mengontrol akses dengan grup keamanan di dokumentasi Amazon RDS.

DBA

Konfirmasikan bahwa database sedang berjalan.

Untuk memeriksa status database Anda, lihat Melihat peristiwa Amazon RDS di dokumentasi Amazon RDS.

DBA
TugasDeskripsiKeterampilan yang dibutuhkan

Buat instance Aurora PostgreSQL di Amazon RDS.

Untuk membuat instance PostgreSQL Aurora, lihat Membuat cluster DB dan menghubungkan ke database pada klaster DB PostgreSQL Aurora dalam dokumentasi Amazon RDS.

DBA

Konfigurasikan grup keamanan masuk dan keluar.

Untuk membuat dan mengonfigurasi grup keamanan, lihat Menyediakan akses ke cluster DB di VPC dengan membuat grup keamanan dalam dokumentasi Aurora.

DBA

Konfirmasikan bahwa database Aurora PostgreSQL sedang berjalan.

Untuk memeriksa status database Anda, lihat Melihat peristiwa Amazon RDS di dokumentasi Aurora.

DBA
TugasDeskripsiKeterampilan yang dibutuhkan

Connect AWS SCT ke database sumber.

Untuk menghubungkan AWS SCT ke database sumber Anda, lihat Menyambung ke PostgreSQL sebagai sumber dalam dokumentasi AWS SCT.

DBA

Connect AWS SCT ke database target.

Untuk menghubungkan AWS SCT ke database target Anda, lihat Apa itu AWS Schema Conversion Tool? dalam Panduan Pengguna AWS Schema Conversion Tool.

DBA

Konversikan skema database di AWS SCT dan simpan kode otomatis yang dikonversi sebagai file SQL.

Untuk menyimpan file yang dikonversi AWS SCT, lihat Menyimpan dan menerapkan skema yang dikonversi di AWS SCT di Panduan Pengguna Alat Konversi Skema AWS.

DBA
TugasDeskripsiKeterampilan yang dibutuhkan

Dapatkan file SQL untuk konversi manual.

Dalam file yang dikonversi AWS SCT, tarik file SQL yang memerlukan konversi manual.

DBA

Perbarui skrip.

Perbarui file SQL secara manual.

DBA

Sumber daya terkait

Informasi tambahan

Kode contoh berikut menunjukkan cara mengkonfigurasi database sumber 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;

Contoh kode berikut menunjukkan cara mengkonfigurasi target Aurora PostgreSQL database:

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