

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
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*Situs web, Amazon Web Services*

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

Catatan: Amazon Cloud Directory tidak lagi terbuka untuk pelanggan baru. [Untuk alternatif Cloud Directory, jelajahi [Amazon DynamoDB dan Amazon](https://aws.amazon.com/dynamodb/) Neptune.](https://aws.amazon.com/neptune/) Jika Anda memerlukan bantuan untuk memilih alternatif yang tepat untuk kasus penggunaan Anda, atau untuk pertanyaan lain, hubungi [AWS Dukungan](https://aws.amazon.com/support/).

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
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif
+ [Contoh database Aurora PostgreSQL (DB)](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Amazon Relational Database Service (Amazon RDS) untuk instans Oracle DB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Terminal interaktif PostgreSQL (psql)](https://www.postgresql.org/docs/current/app-psql.html)
+ [SQL\* Ditambah](https://docs.oracle.com/cd/B14117_01/server.101/b12170/qstart.htm)
+ `AWS_ORACLE_EXT`skema (bagian dari [paket ekstensi AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)) di database target Anda
+ Versi terbaru [AWS Schema Conversion Tool (AWS SCT](https://aws.amazon.com/dms/schema-conversion-tool/)) dan driver yang diperlukan

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

**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](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


Diagram menunjukkan alur kerja berikut:

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

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

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

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

**Layanan AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) adalah mesin database relasional yang dikelola sepenuhnya dan sesuai dengan ACID yang membantu Anda mengatur, mengoperasikan, dan menskalakan penerapan PostgreSQL.
+ [Amazon Relational Database Service (Amazon RDS) untuk](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) Oracle membantu Anda mengatur, mengoperasikan, dan menskalakan database relasional Oracle di AWS Cloud.
+ [AWS Schema Conversion Tool (AWS SCT](https://aws.amazon.com/dms/schema-conversion-tool/)) membantu Anda membuat migrasi database heterogen dapat diprediksi dengan secara otomatis mengonversi skema basis data sumber dan sebagian besar objek kode database ke format yang kompatibel dengan database target.

**Alat lainnya**
+ [pgAdmin](https://www.pgadmin.org/) memungkinkan Anda untuk terhubung dan berinteraksi dengan server database Anda.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) adalah lingkungan pengembangan terintegrasi yang dapat Anda gunakan untuk mengembangkan dan mengelola database di Oracle Database. Anda dapat menggunakan [SQL\* Plus atau Oracle SQL](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) Developer untuk pola ini.

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

### Konfigurasikan database sumber Oracle
<a name="configure-the-oracle-source-database"></a>


| Tugas | Deskripsi | Keterampilan 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](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html) Amazon RDS.<br />Untuk membuat instans Oracle DB di Amazon Elastic Compute Cloud (Amazon EC2), lihat [Amazon EC2 for Oracle](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html) 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](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html) di dokumentasi Cloud Directory. | DBA | 
| Konfigurasikan grup keamanan masuk dan keluar. | Untuk membuat dan mengonfigurasi grup keamanan, lihat [Mengontrol akses dengan grup keamanan](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html) di dokumentasi Amazon RDS. | DBA | 
| Konfirmasikan bahwa database sedang berjalan. | Untuk memeriksa status database Anda, lihat [Melihat peristiwa Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html) di dokumentasi Amazon RDS. | DBA | 

### Konfigurasikan basis data PostgreSQL Aurora target
<a name="configure-the-target-aurora-postgresql-database"></a>


| Tugas | Deskripsi | Keterampilan 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](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html) 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](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup) dalam dokumentasi Aurora. | DBA | 
| Konfirmasikan bahwa database Aurora PostgreSQL sedang berjalan. | Untuk memeriksa status database Anda, lihat [Melihat peristiwa Amazon RDS di dokumentasi](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html) Aurora. | DBA | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Connect AWS SCT ke database sumber. | Untuk menghubungkan AWS SCT ke database sumber Anda, lihat [Menyambung ke PostgreSQL sebagai sumber](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting) dalam dokumentasi AWS SCT. | DBA | 
| Connect AWS SCT ke database target. | Untuk menghubungkan AWS SCT ke database target Anda, lihat [Apa itu AWS Schema](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 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](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply) Pengguna Alat Konversi Skema AWS. | DBA | 

### Migrasikan kode
<a name="migrate-the-code"></a>


| Tugas | Deskripsi | Keterampilan 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
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Fitur Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)

## Informasi tambahan
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

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