Pular para o conteúdo

Utilizando ROWTYPE – Parte I: Melhores práticas de programação PL/SQL

Utilizando ROWTYPE – Parte I

A PL/SQL é uma linguagem que como qualquer outra, possui boas e más práticas de programação. Existem vários caminhos para se chegar ao mesmo resultado, mas existem maneiras mais inteligentes para se alcançar isso.

Um exemplo é o uso de variáveis do tipo ROWTYPE. Com essa abordagem, é possível construir um código mais limpo e organizado. Vamos aos exemplos:

Vamos criar uma tabela chamada EMPRESA_TESTE

CREATE TABLE EMPRESA_TESTE (
   CODIGO         NUMBER(02) NOT NULL,
   NOME           VARCHAR2(2000),
   NOME_FANTASIA  VARCHAR2(2000),
   CNPJ           VARCHAR2(100)
)
/

Não vou criar PK, sequences ou qualquer outro tipo de objeto. Não serão necessários para a demonstração a seguir.

O objetivo será a criação de um bloco onde deveremos inserir informações dentro da tabela EMPRESA_TESTE

Primeiramente irei replicar um código que os Analistas e DBAs mais experientes com certeza já encontraram, e certamente ainda encontram na programação PL/SQL nesse mundo afora.

DECLARE
  v_codigo        NUMBER;
  v_nome          VARCHAR2(2000);
  v_nome_fantasia VARCHAR2(2000);
  v_cnpj          VARCHAR2(100);

BEGIN
   v_codigo        := '1';
   v_nome          := 'GPO';
   v_nome_fantasia := 'GPO (GRUPO DE PROFISSIONAIS ORACLE)';
   v_cnpj          := '99999999999999';

   INSERT INTO empresa_teste VALUES
   (
    v_codigo,
    v_nome,
    v_nome_fantasia,
    v_cnpj
   );

END;
/

COMMIT
/

SELECT * FROM empresa_teste
/

CODIGO NOME            NOME_FANTASIA                      CNPJ
------ --------------- ---------------------------------- ----------------
1      GPO             GPO(GRUPO DE PROFISSIONAIS ORACLE) 99999999999999

Simples não ? Acreditem ou não ainda está mais caprichado do que existe por aí. Agora imagine se tivermos 50 campos para serem inseridos na tabela !

Mesmo assim, vamos dar uma melhorada nisso…delete o registro e execute o script abaixo:

DECLARE
  v_codigo        empresa_teste.codigo%TYPE;
  v_nome          empresa_teste.nome%TYPE;
  v_nome_fantasia empresa_teste.nome_fantasia%TYPE;
  v_cnpj          empresa_teste.cnpj%TYPE;

BEGIN
   v_codigo        := '1';
   v_nome          := 'GPO';
   v_nome_fantasia := 'GPO (GRUPO DE PROFISSIONAIS ORACLE)';
   v_cnpj          := '99999999999999';

   INSERT INTO empresa_teste VALUES
   (
    v_codigo,
    v_nome,
    v_nome_fantasia,
    v_cnpj
   );

END;
/

COMMIT
/

SELECT * FROM empresa_teste
/

CODIGO NOME            NOME_FANTASIA                      CNPJ
------ --------------- ---------------------------------- ----------------
1      GPO             GPO(GRUPO DE PROFISSIONAIS ORACLE) 99999999999999

No exemplo acima utilizamos TYPE para definir os tipos de dados de cada variável. Assim temos a garantia de que as variáveis terão os mesmos tipos que os campos correspondentes na tabela. Só que acaba recorrendo no mesmo problema do primeiro exemplo.

Acaba por aqui ? A resposta é não ! Tentemos de outra maneira…

DECLARE
  v_empTeste      empresa_teste%ROWTYPE;

BEGIN
   v_empTeste.codigo        := '1';
   v_empTeste.nome          := 'GPO';
   v_empTeste.nome_fantasia := 'GPO (GRUPO DE PROFISSIONAIS ORACLE)';
   v_empTeste.cnpj          := '99999999999999';

   INSERT INTO empresa_teste VALUES v_empTeste;

END;
/

COMMIT
/

SELECT * FROM empresa_teste
/

CODIGO NOME            NOME_FANTASIA                      CNPJ
------ --------------- ---------------------------------- ----------------
1      GPO             GPO(GRUPO DE PROFISSIONAIS ORACLE) 99999999999999

Nesse exemplo utilizamos o ROWTYPE para criar uma variável com a mesma estrutura da tabela. Ao preenchermos os respectivos valores em seus campos, podemos fazer a inserção com o conteúdo da variável.

Existem diversas vantagens nesse tipo de abordagem. Garantia de integridade da informação a ser inserida, padronização das inserções e código limpo e de fácil entendimento.

Três maneiras de se chegar ao mesmo resultado. Só que muitas vezes, a maneira como se chega ao objetivo, conta tanto quanto o resultado final.

No próximo post falarei mais um pouco sobre ROWTYPE e seu uso em FUNCTIONS.

Veja a segunda parte do artigo:

https://www.profissionaloracle.com.br/2019/04/06/pl-sql-utilizando-rowtype-parte-ii/

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress