Pular para o conteúdo

Utilizando ROWTYPE – Parte II: Criando uma Função e Testando com Exemplos

PL/SQL – Utilizando ROWTYPE – Parte II

Leia a parte 1 do Artigo

Observando meus artigos antigos, percebi que esqueci de escrever a continuação do artigo sobre ROWTYPE. Lembro que eu ia demonstrar um exemplo utilizando funções. Bom, vamos lá. Antes tarde do que nunca ! 🙂

Vamos criar uma FUNCTION que retornará um ROWTYPE, mas primeiro vamos criar nossa massa de dados:

CREATE TABLE empresa
 (
  codigo NUMBER
 ,nome   VARCHAR2(2000)
 )
 /

Table EMPRESA criado.

INSERT INTO empresa VALUES(1,'EMPRESA 1')
 /

1 linha inserido.

INSERT INTO empresa VALUES(2,'EMPRESA 2')
/

1 linha inserido.

Agora vamos criar nossa FUNCTION:

CREATE OR REPLACE FUNCTION fnc_retorna_empresa
RETURN empresa%ROWTYPE
IS
   v_retorno empresa%ROWTYPE;
BEGIN
   BEGIN
      SELECT a.*
      INTO  v_retorno
      FROM  empresa a
      WHERE a.codigo = (
                        SELECT MAX(b.codigo)
                        FROM   empresa b
                       );
   EXCEPTION
      WHEN others THEN
         DBMS_OUTPUT.put_line('[ ERRO ] ' || DBMS_UTILITY.format_error_stack);
   END;

   v_retorno.codigo := v_retorno.codigo + 1;
   v_retorno.nome   := REPLACE(v_retorno.nome,v_retorno.codigo -1, v_retorno.codigo);
    
   RETURN (v_retorno);

END fnc_retorna_empresa;
Function FNC_RETORNA_EMPRESA compilado

Vamos testar:

DECLARE
   v_retorno empresa%ROWTYPE;

BEGIN
   v_retorno := FNC_RETORNA_EMPRESA;

   DBMS_OUTPUT.put_line('Codigo: ' || v_retorno.codigo);
   DBMS_OUTPUT.put_line('Nome: '   || v_retorno.nome);

END;
Procedimento PL/SQL concluído com sucesso.

Codigo: 3
Nome: EMPRESA 3

Vamos incrementar esse teste:

DECLARE
   v_retorno empresa%ROWTYPE;

BEGIN
   v_retorno := FNC_RETORNA_EMPRESA;

   DBMS_OUTPUT.put_line('Codigo: ' || v_retorno.codigo);
   DBMS_OUTPUT.put_line('Nome: '   || v_retorno.nome);
 
   INSERT INTO empresa VALUES v_retorno; 

   DBMS_OUTPUT.put_line('Codigo: ' || v_retorno.codigo);
   DBMS_OUTPUT.put_line('Nome: '   || v_retorno.nome);
 
END;
Procedimento PL/SQL concluído com sucesso.

Codigo: 3
Nome: EMPRESA 3
Codigo: 4
Nome: EMPRESA 4

Vamos mudar novamente:

DECLARE
   v_retorno empresa%ROWTYPE;

BEGIN
   DBMS_OUTPUT.put_line('Codigo: ' || FNC_RETORNA_EMPRESA().codigo);
   DBMS_OUTPUT.put_line('Nome: '   || FNC_RETORNA_EMPRESA().nome);

   INSERT INTO empresa VALUES (v_retorno.codigo, v_retorno.nome);

   COMMIT;

   DBMS_OUTPUT.put_line('Codigo: ' || FNC_RETORNA_EMPRESA().codigo);
   DBMS_OUTPUT.put_line('Nome: '   || FNC_RETORNA_EMPRESA().nome);

   v_retorno := FNC_RETORNA_EMPRESA;
 
   INSERT INTO empresa VALUES v_retorno;
 
   DBMS_OUTPUT.put_line('Codigo: ' || v_retorno.codigo);
   DBMS_OUTPUT.put_line('Nome: '   || v_retoro.nome);
 
   COMMIT;

END;
Procedimento PL/SQL concluído com sucesso.p

Codigo: 4
Nome: EMPRESA 4
Codigo: 5
Nome: EMPRESA 5
Codigo: 6
Nome: EMPRESA 6 

Como percebem, é possível referenciar apenas o atributo da tabela se for preciso, tanto através da chamada da função (FNC_RETORNA_EMPRESA().codigo) quanto pela variável que recebeu o retorno (v_retorno.codigo).

São várias as possibilidades de utilização, agora o resto eu deixo com vocês. 🙂

Um grande abraço

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