

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Aurora PostgreSQL의 동적 SQL 명령문에서 익명 블록 처리
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*anuradha chintha, Amazon Web Services*

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

참고: Amazon Cloud Directory는 더 이상 신규 고객에게 공개되지 않습니다. Cloud Directory의 대안은 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 및 [Amazon Neptune](https://aws.amazon.com/neptune/)을 참조하세요. 사용 사례에 적합한 대안을 선택하는 데 도움이 필요하거나 다른 질문이 있는 경우에 문의하세요[AWS Support](https://aws.amazon.com/support/).

이 패턴은 동적 SQL 명령문에서 익명 블록을 처리할 때 발생하는 오류를 방지하는 방법을 보여줍니다. AWS Schema Conversion Tool을 사용하여 Oracle 데이터베이스를 Aurora PostgreSQL 호환 버전 데이터베이스로 변환할 때 오류 메시지가 나타납니다. 오류를 방지하려면 `OUT` 바인드 변수의 값을 알아야 하지만 SQL 명령문을 실행하기 전까지 `OUT` 바인드 변수의 값을 알 수 없습니다. 이 오류는 AWS Schema Conversion Tool(AWS SCT)이 동적 SQL 명령문 내의 로직을 이해하지 못하기 때문에 발생합니다. AWS SCT는 PL/SQL 코드(즉, 함수, 프로시저, 패키지)의 동적 SQL 명령문을 변환할 수 없습니다.

## 사전 조건 및 제한 사항
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ [Aurora PostgreSQL 데이터베이스(DB) 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Oracle DB 인스턴스용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [PostgreSQL 인터랙티브 터미널 (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` 스키마([AWS SCT 확장 팩](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)의 일부)
+ 최신 버전의 [AWS Schema Conversion Tool(AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) 및 필수 드라이버

## 아키텍처
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle Database 버전 10g 이상

**대상 기술 스택**
+ Amazon Aurora PostgreSQL
+ Amazon RDS for PostgreSQL
+ AWS Schema Conversion Tool(AWS SCT)

**마이그레이션 아키텍처**

다음 다이어그램은 AWS SCT 및 Oracle `OUT` 바인드 변수를 사용하여 애플리케이션 코드에서 내장된 SQL 명령문을 스캔하고 코드를 Aurora 데이터베이스에서 사용할 수 있는 호환 가능한 형식으로 변환하는 방법을 보여줍니다.

![\[AWS SCT 및 Oracle OUT 바인드 변수를 사용하기 위한 아키텍처 다이어그램\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


이 다이어그램은 다음 워크플로우를 보여줍니다.

1. Aurora PostgreSQL을 대상 데이터베이스로 사용하여 소스 데이터베이스에 대한 AWS SCT 보고서를 생성합니다.

1. 동적 SQL 코드 블록(AWS SCT가 오류를 야기한 블록)에서 익명 블록을 식별합니다.

1. 코드 블록을 수동으로 변환하고 대상 데이터베이스에 코드를 배포합니다.

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

**서비스**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전관리형 관계형 데이터베이스 엔진입니다.
+ [Oracle용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/)은 소스 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 예측 가능하게 합니다.

**기타 도구**
+ [pgAdmin](https://www.pgadmin.org/)을 사용하면 데이터베이스 서버에 연결하고 상호 작용할 수 있습니다.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/)는 Oracle Database에서 데이터베이스를 개발하고 관리하는 데 사용할 수 있는 통합 개발 환경입니다. 이 패턴에는 [SQL \$1Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) 또는 Oracle SQL Developer를 사용할 수 있습니다.

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

### Oracle 소스 데이터베이스 구성
<a name="configure-the-oracle-source-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS 또는 Amazon EC2에서 Oracle 인스턴스를 생성합니다. | Amazon RDS에서 Oracle DB 인스턴스를 만들려면 Amazon RDS 설명서의 [Oracle DB 인스턴스 생성 및 Oracle DB 인스턴스의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)을 참조하세요.Amazon Elastic Compute Cloud (Amazon EC2)에서 Oracle DB 인스턴스를 생성하려면 AWS Prescriptive Guidance 설명서의 [Oracle용 Amazon EC2](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html)를 참조하세요. | DBA | 
| 마이그레이션을 위한 데이터베이스 스키마와 객체를 생성합니다. | Amazon Cloud Directory를 사용하여 데이터베이스 스키마를 생성할 수 있습니다. 자세한 내용은 Cloud Directory 설명서의 [스키마 생성](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html)을 참조하세요. | DBA | 
| 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 보안 그룹을 생성하고 구성하려면 Amazon RDS 설명서의 [보안 그룹을 통한 액세스 제어](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)를 참조하세요. | DBA | 
| 데이터베이스가 실행 중인지 확인합니다. | 데이터베이스 상태를 확인하려면 Amazon RDS 설명서의 [Amazon RDS 이벤트 보기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html)를 참조하세요. | DBA | 

### 대상 Aurora PostgreSQL 데이터베이스 구성
<a name="configure-the-target-aurora-postgresql-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS에서 Aurora PostgreSQL 인스턴스를 생성합니다. | Aurora PostgreSQL 인스턴스를 생성하려면 Amazon RDS 설명서의 [DB 클러스터 생성 및 Aurora PostgreSQL DB 클러스터의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)을 참조하세요. | DBA | 
| 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 보안 그룹을 생성 및 구성하려면 Aurora 설명서의 [보안 그룹을 생성하여 VPC 내의 DB 클러스터에 대한 액세스 제공](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup)을 참조하세요. | DBA | 
| Aurora PostgreSQL 데이터베이스가 실행 중인지 확인합니다. | 데이터베이스 상태를 확인하려면 Aurora 설명서의 [Amazon RDS 이벤트 보기](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html)를 참조하세요. | DBA | 

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


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 소스 데이터베이스에 연결합니다. | AWS SCT를 소스 데이터베이스에 연결하려면 AWS SCT 설명서의 [PostgreSQL에 소스로 연결하기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting)를 참조하세요. | DBA | 
| AWS SCT를 대상 데이터베이스에 연결합니다. | AWS SCT를 대상 데이터베이스에 연결하려면 AWS Schema Conversion Tool 사용 설명서의 [AWS Schema Conversion Tool이란 무엇인가?](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참조하세요. | DBA | 
| AWS SCT에서 데이터베이스 스키마를 변환하고 자동으로 변환된 코드를 SQL 파일로 저장합니다. | AWS SCT로 변환된 파일을 저장하려면 AWS Schema Conversion Tool 사용 설명서의 [변환된 스키마를 AWS SCT에 저장 및 적용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply)을 참조하세요. | DBA | 

### 코드 마이그레이션
<a name="migrate-the-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 수동 변환을 위한 SQL 파일을 가져옵니다. | AWS SCT로 변환된 파일에서 수동 변환이 필요한 SQL 파일을 가져옵니다. | DBA | 
| 스크립트를 업데이트합니다. | SQL 파일을 수동으로 업데이트합니다. | DBA | 

## 관련 리소스
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon Aurora 기능](https://aws.amazon.com/rds/aurora/postgresql-features/)

## 추가 정보
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

다음 예제 코드는 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;
```

다음 예제 코드는 대상 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 ; 
$$
```