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

Funções de data Oracle

  Com o Oracle é possível obter uma série de resultados a partir de uma ou mais datas, como por exemplo verificar o último dia do mês ou verificar a quantidade de meses entre duas datas, então vamos a alguns exemplos:   Data atual do sistema: SYSDATE Remover meses de uma data: ADD_MONTHS(SYSDATE, -1) Adicionar meses de uma data: ADD_MONTHS(SYSDATE, +1) Buscar o último dia do mês: LAST_DAY(SYSDATE) Primeiro dia do mês: TRUNC(SYSDATE, ‘MONTH’) Quantidade de meses entre duas datas: MONTHS_BETWEEN(SYSDATE, ‘27/07/1982’) Primeiro dia do ano: TRUNC(SYSDATE, ‘YEAR’) Dias da semana: DECODE( TO_NUMBER( TO_CHAR          (SYSDATE, ‘D’) ) ,1, ‘domingo’ ,2, ‘segunda-feira’ ,3, ‘terça-feira’ ,4, ‘quarta-feira’ ,5, ‘quinta-feira’ ,6, ‘sexta-feira’ ,7,’sábado’ )

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;   //   // temp char pointer   psTemp : PChar;   //   // check point   dwChkP : DWord; begin   ss.dwCurrentState := -1;   //

Como Verificar se um Objeto Existe (Delphi)

Em alguns momentos surge a necessidade de verificar se um determinado objeto existe, ou seja se já foi criado, principalmente quando se trabalha com criação dinâmica em tempo de execução, então vamos ao exemplo: - Vamos criar uma variável, um vetor do tipo caixa de texto: var Minha_caixa : array of TEdit; - Em seguida definir o tamanho desse vetor, no caso será dez: setLength(Minha_caixa, 10) - Agora iremos criar nossa caixa de texto: // lembrando que o vetor inicia em zero // logo o índice final é o tamanho total - 1 for vl_i := 0 to Length(Minha_caixa) -1 do begin Minha_caixa[vl_i] := TEdit.Create(self); with Minha_caixa[vl_i] do begin Parent := Self; Name := 'Caixa_N'+IntToStr(vl_i); Text := 'Esta é a '+IntToStr(vl_i)+' º caixa !'; ReadOnly := true; Height := 21; Width :=