Pular para o conteúdo principal

Array no PL/SQL (Oracle)

Trabalhar com estruturas indexadas pode nos poupar muito trabalho, deixar o código mais limpo e reutilizável, pois bem vamos dar um exemplo de como fazer isso no PL/SQL. Criaremos um tipo table que seja capaz de armazenar nomes de uma tabela de funcionários de forma indexada, e em seguida mostraremos o que foi armazenado, segue o código:

  1: declare
  2:   -- tipo tabela contendo apenas texto e indexado
  3:   type   TipoNomFunc is table of varchar2(200) index by binary_integer;
  4:   -- variável do nosso tipo (como nosso tipo é indexado ele funcionará como um array)
  5:   func   TipoNomFunc;
  6:   -- indice para loop
  7:   indice number := 1;
  8:   --
  9: begin
 10:   --
 11:   -- cursor para nossa tabela de funcionarios
 12:   for emps in (
 13:       select * 
 14:       from   funcionarios
 15:   ) 
 16:   loop
 17:     -- colocamos o nome do funcionario em nosso "vetor"
 18:     func(indice) := emps.nom_funcionario;
 19:     -- incrementamos o indice
 20:     indice := indice + 1;
 21:     --
 22:   end loop;
 23:   --
 24:   -- agora percorremos todo nosso "vetor" e mostramos seu conteúdo
 25:   indice := func.first;
 26:   loop
 27:     -- se não houver um próximo sai do loop
 28:     exit when indice is null;
 29:     dbms_output.put_line(indice || ':' || func(indice));
 30:     indice := func.next(indice);
 31:     --
 32:   end loop;
 33:   --
 34: end;

Comentários

  1. como faço para criar uma função armazenada cujo o parametro é um número decimal de no maximo tres algarismos e que retorne seu valor por extenso?
    P.S se puder me ajudar ficarei muito grato.
    obrigado e até mais.

    ResponderExcluir
  2. muito bom e de fácil compreensão. Obrigado.

    ResponderExcluir

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.

Mais visitadas

Alterar cores do PageControl (Delphi)

O padrão Windows todo cinza não é muito atraente, por isso quando nos utilizarmos do PageControl podemos alterar suas cores e fontes da seguinte maneira: Em primeiro lugar devemos alterar a propriedade OwnerDraw para TRUE ; Depois implementar seu método DrawTab da seguinte maneira: //pinta a fonte Control.Canvas.Font.Color:=clBlack; // // pinta a paleta / aba Control.Canvas.brush.Color:=clSkyBlue; PageControl1.Canvas.Rectangle(Rect); Control.Canvas.TextOut(Rect.left+5,Rect.top+3,PageControl1.Pages[tabindex].Caption); // pinta a parte interna (tabsheet) PageControl1.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color; PageControl1.Pages[TabIndex].Repaint; Caso a intenção seja manter cada aba com seu próprio estilo basta adicionar um CASE filtrando o índice das abas: case TabIndex of   0: Control.Canvas.Font.Color:=clBlack;   1: Control.Canvas.Font.Color:=clWindow; ...

Manipular arquivos com PL/SQL (Oracle)

O bom e velho arquivo, é impressionante como lidamos com seus vários tipos durante todos os dias, bom hoje vamos mostrar um jeito simples de se escrever e ler arquivos apenas com a codificação nativa do Oracle. A primeira coisa a fazer é criar um diretório válido configurado no Oracle, e permissões de acesso a esse diretório para o usuário de banco onde faremos o exemplo, sendo assim suponhamos que nosso usuário de banco se chame programero, e nosso diretório real esteja em c:\programero, então logado como SYSTEM devemos executar os seguintes comandos: 1: -- cria diretorio 2: create or replace directory DIR_PROGRAMERO as ' C:\PROGRAMERO '; 3: -- concede permissão de escrita e leitura para nosso usuário 4: grant read , write on directory DIR_PROGRAMERO to PROGRAMERO; Para escrever, basicamente precisamos apenas saber onde esse arquivo ficará, no nosso caso no diretório criado acima, segue o código de escrita: 1: declare 2: -- nosso handler 3: v_a...

Iniciar e Parar Serviços do Windows (Delphi)

Em certas ocasiões nos deparamos com a necessidade de manipular determinadas atividades do SO, como iniciar ou parar um banco de dados, ou qualquer outro serviço que esteja funcionando no momento. Segue abaixo um código que encontrei na Internet para tal finalidade (não me recordo à fonte, assim que eu a encontrar colocarei). Iniciar Serviço: uses WinSvc; // // start service // // return TRUE if successful // // sMachine: //   machine name, ie: \SERVER //   empty = local machine // // sService //   service name, ie: Alerter // function ServiceStart(   sMachine,   sService : string ) : boolean; var   //   // service control   // manager handle   schm,   //   // service handle   schs   : SC_Handle;   //   // service status   ss     : TServiceStatus;   //   // te...