

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

# 100개 이상의 인수가 있는 Oracle 함수 및 프로시저를 PostgreSQL로 마이그레이션
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql"></a>

*Srinivas Potlachervoo, Amazon Web Services*

## 요약
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-summary"></a>

이 패턴은 100개 이상의 인수가 있는 Oracle Database 함수 및 프로시저를 PostgreSQL로 마이그레이션하는 방법을 보여줍니다. 예를 들어 이 패턴을 사용하여 Oracle 함수 및 프로시저를 다음 PostgreSQL 호환 AWS 데이터베이스 서비스 중 하나로 마이그레이션할 수 있습니다.
+ PostgreSQL용 Amazon Relational Database Service(Amazon RDS)
+ Amazon Aurora PostgreSQL 호환 에디션

PostgreSQL은 100개 이상의 인수가 있는 함수 또는 프로시저를 지원하지 않습니다. 해결 방법으로 소스 함수의 인수와 일치하는 형식 필드가 있는 새로운 데이터 유형을 정의할 수 있습니다. 그런 다음 사용자 지정 데이터 유형을 인수로 사용하는 PL/pgSQL 함수를 만들고 실행할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ [Amazon RDS Oracle 데이터베이스(DB) 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Amazon RDS for PostgreSQL DB 인스턴스](https://aws.amazon.com/getting-started/hands-on/create-connect-postgresql-db/) 또는 [Aurora PostgreSQL-Compatible DB 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)

**제품 버전**
+ Amazon RDS Oracle DB 인스턴스 버전 10.2 이상
+ Amazon RDS PostgreSQL DB 인스턴스 버전 9.4 이상 또는 Aurora PostgreSQL-Compatible DB 인스턴스 버전 9.4 이상
+ Oracle SQL Developer 버전 18 이상
+ pgAdmin 버전 4 이상

## 아키텍처
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-architecture"></a>

**소스 기술 스택  **
+ Amazon RDS Oracle DB 인스턴스 버전 10.2 이상

**대상 기술 스택  **
+ Amazon RDS PostgreSQL DB 인스턴스 버전 9.4 이상 또는 Aurora PostgreSQL-Compatible DB 인스턴스 버전 9.4 이상

## 도구
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-tools"></a>

**서비스**
+ [PostgreSQL용 Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)는 AWS Cloud에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 규모를 조정할 수 있는 완전관리형 ACID 준수 관계형 데이터베이스 엔진입니다.

**기타 서비스**
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

## 모범 사례
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-best-practices"></a>

생성하는 데이터 유형이 소스 Oracle 함수 또는 프로시저에 포함된 유형 필드와 일치하는지 확인합니다.

## 에픽
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-epics"></a>

### 100개 이상의 인수가 있는 Oracle 함수 또는 프로시저 실행
<a name="run-an-oracle-function-or-procedure-that-has-more-than-100-arguments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 100개 이상의 인수가 있는 기존 Oracle/PLSQL 함수 또는 프로시저를 생성 또는 식별합니다. | 100개 이상의 인수가 있는 Oracle/PLSQL 함수 또는 프로시저를 생성합니다.<br />-또는-<br />100개 이상의 인수가 있는 기존 Oracle/PLSQL 함수 또는 프로시저를 식별합니다.<br />자세한 내용은 Oracle Database 설명서의 섹션 [14.7 CREATE FUNCTION Statement](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-FUNCTION-statement.html#GUID-B71BC5BD-B87C-4054-AAA5-213E856651F2) 및 [14.11 CREATE PROCEDURE Statement](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/CREATE-PROCEDURE-statement.html#GUID-5F84DB47-B5BE-4292-848F-756BF365EC54)를 참조하세요. | Oracle/PLSQL 전문 지식 | 
| Oracle/PLSQL 함수 또는 프로시저를 컴파일합니다. | Oracle/PLSQL 함수 또는 프로시저를 컴파일합니다.<br />자세한 내용은 Oracle Database 설명서의 [함수 컴파일](https://docs.oracle.com/cd/E37097_01/doc.42/e35128/GUID-6B7B6F82-616D-4915-82BE-D4AE7F59CF37.htm#AEUTL165)을 참조하세요. | Oracle/PLSQL 전문 지식 | 
| Oracle/PLSQL 함수를 실행합니다. | Oracle/PLSQL 함수 또는 프로시저를 실행합니다. 그런 다음 출력을 저장합니다. | Oracle/PLSQL 전문 지식 | 

### 소스 함수 또는 프로시저의 인수와 일치하는 새로운 데이터 유형 정의
<a name="define-a-new-data-type-that-matches-the-source-functionapos-s-or-procedureapos-s-arguments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL에서 새로운 데이터 유형을 정의합니다. | PostgreSQL에서 소스 Oracle 함수 또는 프로시저의 인수에 나타나는 것과 동일한 필드를 모두 포함하는 새로운 데이터 유형을 정의합니다.<br />자세한 내용은 PostgreSQL 설명서의 [CREATE USER](https://www.postgresql.org/docs/current/sql-createtype.html)를 참조하세요. | PostgreSQL PL/pgSQL 지식 | 

### 새로운 TYPE 인수를 포함하는 PostgreSQL 함수 생성
<a name="create-a-postgresql-function-that-includes-the-new-type-argument"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새로운 데이터 유형을 포함하는 PostgreSQL 함수를 생성합니다. | 새로운 `TYPE` 인수를 포함하는 PostgreSQL 함수를 생성합니다.<br />예제 함수를 검토하려면 이 패턴의 **추가 정보** 섹션을 참조하세요. | PostgreSQL PL/pgSQL 지식 | 
| PostgreSQL 함수를 컴파일합니다. | PostgreSQL에서 함수를 컴파일합니다. 새로운 데이터 유형 필드가 소스 함수나 프로시저의 인수와 일치하면 함수가 성공적으로 컴파일됩니다. | PostgreSQL PL/pgSQL 지식 | 
| PostgreSQL 함수를 실행합니다. | PostgreSQL 함수를 실행합니다. | PostgreSQL PL/pgSQL 지식 | 

## 문제 해결
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 함수는 다음과 같은 오류를 반환합니다.<br />**ERROR: ‘<statement>’ 근처의 구문 오류** | 함수의 명령문 모두가 세미콜론 (`;`)으로 끝나는지 확인합니다. | 
| 함수는 다음과 같은 오류를 반환합니다.<br />**ERROR: ‘<variable>’은 알려진 변수가 아님** | 함수 본문에 사용된 변수가 함수 `DECLARE` 섹션 내에 나열되어 있는지 확인합니다. | 

## 관련 리소스
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-resources"></a>
+ [Amazon Aurora PostgreSQL을 사용한 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) (*Aurora용 Amazon Aurora 사용 설명서*)
+ [CREATE TYPE](https://www.postgresql.org/docs/11/sql-createtype.html) (PostgreSQL 설명서)

## 추가 정보
<a name="migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql-additional"></a>

**TYPE 인수를 포함하는 PostgreSQL 함수의 예**

```
CREATE OR REPLACE FUNCTION test_proc_new
(
    IN p_rec type_test_proc_args
) 
RETURNS void
AS
$BODY$
BEGIN

    /*
    **************
    The body would contain code to process the input values.
    For our testing, we will display couple of values.
    ***************
    */
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_acct_id: ', p_rec.p_acct_id);
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_id: ', p_rec.p_ord_id);
    RAISE NOTICE USING MESSAGE = CONCAT_WS('', 'p_ord_date: ', p_rec.p_ord_date);
   
END;
$BODY$
LANGUAGE plpgsql 
COST 100;
```