

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Manipule blocos anônimos em instruções de SQL dinâmico no Aurora PostgreSQL
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql"></a>

*Anuradha Chintha, Amazon Web Services*

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

Observação: o Amazon Cloud Directory não está mais aberto para novos clientes. [Para alternativas ao Cloud Directory, explore o [Amazon DynamoDB e o Amazon](https://aws.amazon.com/dynamodb/) Neptune.](https://aws.amazon.com/neptune/) Se precisar de ajuda para escolher a alternativa certa para seu caso de uso ou para qualquer outra dúvida, entre em contato com [AWS Support](https://aws.amazon.com/support/).

Esse padrão mostra como evitar o erro que você recebe ao manipular blocos anônimos em instruções de SQL dinâmico. Você recebe uma mensagem de erro ao usar o AWS Schema Conversion Tool para converter um banco de dados Oracle em um banco de dados Aurora compatível com PostgreSQL. Para evitar o erro, você deve saber o valor de uma variável de ligação `OUT`, mas não pode saber o valor de uma variável de ligação `OUT` até depois de executar a instrução SQL. O erro resulta do fato de a AWS Schema Conversion Tool (AWS SCT) não entender a lógica dentro da instrução Dynamic SQL. O AWS SCT não pode converter a instrução SQL dinâmica em PL/SQL código (ou seja, funções, procedimentos e pacotes).

## Pré-requisitos e limitações
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-prereqs"></a>

**Pré-requisitos **
+ Conta da AWS ativa
+ [Instância de banco de dados (DB) Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html)
+ [Amazon Relational Database Service (Amazon RDS) para instância de banco de dados Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
+ [Terminal interativo PostgreSQL (psql)](https://www.postgresql.org/docs/current/app-psql.html)
+ [SQL \*Plus](https://docs.oracle.com/cd/B14117_01/server.101/b12170/qstart.htm)
+ Esquema `AWS_ORACLE_EXT` (parte do [pacote de extensão AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)) em seu banco de dados de destino
+ Versão mais recente da [AWS Schema Conversion Tool (AWS SCT](https://aws.amazon.com/dms/schema-conversion-tool/)) e seus drivers necessários

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

**Pilha de tecnologia de origem**
+ Oracle Database on-premises 10g e versão posterior

**Pilha de tecnologias de destino**
+ Amazon Aurora PostgreSQL
+ Amazon RDS para PostgreSQL
+ AWS Schema Conversion Tool (AWS SCT)

**Arquitetura de migração**

O diagrama a seguir mostra como usar as variáveis de ligação `OUT` AWS SCT e Oracle para escanear o código do seu aplicativo em busca de instruções SQL incorporadas e converter o código em um formato compatível que um banco de dados Aurora possa usar.

![Diagrama de arquitetura para usar as variáveis de ligação AWS SCT e Oracle OUT](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/ada89410-b866-4d39-af9c-021be6cc6ae5/images/7c004981-2ed0-4b67-989f-54d8691712ca.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Gere um relatório da AWS SCT para o banco de dados de origem usando o Aurora PostgreSQL como banco de dados de destino.

1. Identifique o bloco anônimo no bloco de código SQL dinâmico (para o qual a AWS SCT gerou o erro).

1. Converta o bloco de código manualmente e implante o código em um banco de dados de destino.

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

**Serviços da AWS**
+ O [Amazon Aurora Edição Compatível com PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) é um mecanismo de banco de dados relacional totalmente gerenciado e em conformidade com ACID que ajuda você a configurar, operar e escalar implantações do PostgreSQL.
+ O [Amazon Relational Database Service (Amazon RDS) para Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) ajuda você a configurar, operar e escalar um banco de dados relacional Oracle na Nuvem AWS.
+ O [AWS Schema Conversion Tool (AWS SCT](https://aws.amazon.com/dms/schema-conversion-tool/)) ajuda você a tornar previsíveis migrações heterogêneas de bancos de dados ao converter automaticamente o esquema do banco de dados de origem e a maioria dos objetos de código do banco de dados em um formato compatível com o banco de dados de destino.

**Outras ferramentas**
+ O [pgAdmin](https://www.pgadmin.org/) permite que você se conecte e interaja com seu servidor de banco de dados.
+ O [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/) é um ambiente de desenvolvimento integrado que você pode usar para desenvolver e gerenciar bancos de dados no Oracle Database. Você pode usar o [SQL \*Plus](https://docs.oracle.com/cd/B19306_01/server.102/b14357/qstart.htm) ou o Oracle SQL Developer para esse padrão.

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

### Configurar o banco de dados de origem do Oracle
<a name="configure-the-oracle-source-database"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma instância Oracle no Amazon RDS ou na Amazon EC2. | Para criar uma instância de banco de dados Oracle no Amazon RDS, consulte [Criar uma instância de banco de dados Oracle e conectar-se a um banco de dados em uma instância Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html) na documentação do Amazon RDS.<br />Para criar uma instância de banco de dados Oracle no Amazon Elastic Compute Cloud (Amazon EC2), consulte [Amazon EC2 for Oracle](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html) na documentação do AWS Prescriptive Guidance. | DBA | 
| Crie um esquema de banco de dados e objetos para migração. | É possível usar o Amazon Cloud Directory para criar um esquema de banco de dados. Para obter mais informações, consulte [Criar um esquema](https://docs.aws.amazon.com/clouddirectory/latest/developerguide/getting_started_create_schema.html) na documentação do Cloud Directory. | DBA | 
| Configurar grupos de segurança de entrada e saída. | Para criar e configurar grupos de segurança, consulte [Controle de acesso com grupos de segurança](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html) na documentação do Amazon RDS. | DBA | 
| Confirme se o banco de dados está em execução. | Para verificar o status do seu banco de dados, consulte [Visualização de eventos do Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ListEvents.html) na documentação do Amazon RDS. | DBA | 

### Configurar o banco de dados Aurora PostgreSQL de destino
<a name="configure-the-target-aurora-postgresql-database"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma instância do Aurora PostgreSQL no Amazon RDS. | Para criar uma instância do Aurora PostgreSQL, consulte [Criar um cluster de banco de dados e conectar-se a um banco de dados em um cluster de banco de dados do Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html), na documentação do Amazon RDS. | DBA | 
| Configure um grupo de segurança de entrada e saída. | Para criar e configurar grupos de segurança, consulte [Fornecer acesso ao cluster de banco de dados na VPC criando um grupo de segurança](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html#CHAP_SettingUp_Aurora.SecurityGroup) na documentação do Aurora. | DBA | 
| Confirme se o banco de dados do Aurora PostgreSQL está em execução. | Para verificar o status do seu banco de dados, consulte [Visualização de eventos do Amazon RDS](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/USER_ListEvents.html) na documentação do Aurora. | DBA | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Conecte a AWS SCT ao banco de dados de origem. | Para conectar a AWS SCT ao seu banco de dados de origem, consulte [Conectar ao PostgreSQL como origem](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Connecting) na documentação da AWS SCT. | DBA | 
| Conecte a AWS SCT ao seu banco de dados de destino. | Para conectar a AWS SCT ao seu banco de dados de destino, consulte [O que é a AWS Schema Conversion Tool?](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) no Guia do usuário da AWS Schema Conversion Tool. | DBA | 
| Converta o esquema do banco de dados na AWS SCT e salve o código convertido automatizado como um arquivo SQL. | Para salvar arquivos convertidos da AWS SCT, consulte [Salvar e aplicar seu esquema convertido na AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html#CHAP_Converting.SaveAndApply) no Guia do usuário da AWS Schema Conversion Tool. | DBA | 

### Migrar o código
<a name="migrate-the-code"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Obtenha o arquivo SQL para conversão manual. | No arquivo convertido da AWS SCT, extraia o arquivo SQL que requer conversão manual. | DBA | 
| Atualize o script. | Atualize manualmente o arquivo SQL. | DBA | 

## Recursos relacionados
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Atributos do Amazon Aurora](https://aws.amazon.com/rds/aurora/postgresql-features/)

## Mais informações
<a name="handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql-additional"></a>

O código do exemplo a seguir mostra como configurar o banco de dados de origem do 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;
```

O código do exemplo a seguir mostra como configurar o banco de dados de destino do 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 ; 
$$
```