Translate

terça-feira, 25 de novembro de 2014

JavaScript - Verificar em qual linha de uma tela (tabela) vc está

Verificar em qual linha de uma tabela vc está....

        a_td[14] = "<img id=''img_parcelas'' onclick=''incluir_parcelas(this)'' alt=''Incluir parcelas'' src=''/icons/add.png'' style=''cursor:pointer;'' border=''0'' align=''center''>"


function incluir_parcelas(o_img)
          {
                     
            var o_tr    = o_img.parentNode.parentNode;
            var o_table = o_tr.parentNode;

            alert(o_tr.rowIndex);

          }








quinta-feira, 13 de novembro de 2014

JavaScript - Verificar se está em determinada Aba

Certa vez precisei habilitar uma DIV somente quando estivesse em uma determinada aba. Para isso precisei pesquisar como faço para saber se estou na Aba em questão ou não.

Colocar na função onde muda as abas.

var abaItem = document.getElementById("div_aba_itens").style.display;
        
        if (abaItem  == "inline") {
          //alert("Aba Itens");
          document.getElementById("div_arquivo").style.display = "inline"; 
          } 
        else {
          document.getElementById("div_arquivo").style.display = "none";
        }  

quarta-feira, 22 de outubro de 2014

JavaScript - Retornar os valores das linhas selecionadas de um ComboBox

Código para mostrar os valores das linhas selecionadas de um ComboBox, concatenados.

<html>
 <head>
  <title>Retornar o texto de um Combo</title>
 </head>
   <body>
    <div style="text-align: left;">
     <select  multiple="true" name="p_cd_time" size="3" id="p_cd_time">
      <option value="C">Corinthians</option>
      <option value="S">Sao Paulo</option>
      <option value="P">Palmeiras</option> 
      <option value="N">Santos</option>
     </select></div>

     <br><br>
     <input type="submit" value="OK" onclick=verifica()>
    </body>

  
  <script type="text/javascript"> 
  
  // **************************************************
  // Função responsável por obter a quantidade de
  // itens selecionados de um select do tipo multiplo
  
function jsContaSelect(obj)
  {
var select  = $(obj).childNodes;
var child   = $(obj).length;
var qtd = 0;
var i = 0;
for(var i = 0;i < child;i++){
 if ( select[i].selected )
qtd++;
}
if ( qtd > 0 )
{
 return qtd;
} else {
 return 0;
}
  }  

  function verifica() {

//var qt_time = jsContaSelect("p_cd_time") ;  
    //alert(qt_time);

var tnl = document.getElementById("p_cd_time");  

  var cdTime="";
    for(i=0;i<tnl.length;i++){  
 
      if(tnl[i].selected == true){  
alert(tnl[i].value);
if (cdTime == "") { 
  var cdTime = "'"+tnl[i].value+"'";
}
else {
  var cdTime = cdTime + "," + "'"+tnl[i].value+"'";
}  
      }  
    }  
 
    alert(cdTime) ;

 }            
  
 </script>
</html>











quinta-feira, 31 de julho de 2014

SQL - Trazer intervalo de anos

Precisei em uma ocasião fazer um combo em HTML que trouxesse os anos começando em 2014 até o ano atual + 1. Usei a query abaixo. Bom guardar pois nunca se sabe.

select distinct (to_char(to_date('2014','YYYY'),'yyyy') - 1 + level) ano   
from  dual
where  (to_char(to_date('2014','YYYY'),'yyyy') - 1 + level) <= to_char(sysdate,'yyyy') + 1 
connect by level < 30
/* ((last_day(to_date('01/02/2014','DD/MM/YYYY'))  - to_date('01/02/2014','DD/MM/YYYY'))) */
order by 1 asc  

terça-feira, 22 de julho de 2014

PL/SQL - Função para remover caracteres especiais

Função para remover caracteres especiais

function fun_remove_char_esp(texto in varchar2) return varchar2 is
    
    begin
      return translate(texto,'ÑÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕÄËÏÖÜÇñáéíóúàèìòùâêîôûãõäëïöüç.-!"''`#$%().:[/]{}¨+?;ºª°§&´*<>','NAEIOUAEIOUAEIOUAOAEIOUCnaeiouaeiouaeiouaoaeiouc');
    end;

segunda-feira, 21 de julho de 2014

JavaScript - Retornar o texto de um ComboBox

Função javaScript para retornar o texto (não o ID), de uma comboBox:

<html>
<head>
<title>Retornar o texto de um Combo</title>
</head>
<body>
<form name="frmTeste" action="" method="post" onsubmit="return retornaTexto()">
Selecione uma cidade:
<select name="optCidade">
<option value=""></option>
<option value="1">Sao Paulo</option>
<option value="2">Rio de Janeiro</option>
<option value="3">Vitoria</option>
<option value="4">Curitiba</option>
<option value="5">Salvador</option>
</select>
<br><br>
<input type="submit" value="OK">
</form>
</body>

<script type="text/javascript">
function retornaTexto(){
var objRadio = document.forms["frmTeste"].elements["optCidade"];
var objSel = document.forms["frmTeste"].elements["optCidade"].selectedIndex;
if (objRadio.value != 0){      
 alert("Cidade Escolhida: "+ objRadio.options[objSel].innerText);     
}else{
 alert("Favor selecionar uma opcao!");
 return false;
  }
}
</script>
</html>

JavaScript - Substr

Exemplo de utilização de Substr em JavaScript

<html>
<head>
<title>Editor HTML Online</title>
</head>
<body>
<div style="text-align: left;">
marcio alexandre</div>

<div style="text-align: left;">
<input name="btn_marcio" type="button"  onclick="teste()" value="Substr" />
</div>
</body>
<script type="text/javascript" src="/jscripts/prototype.js"></script>
    <script type="text/javascript">

 function teste()
 {
   var str = "marcio alexandre";
        var res = str.substr(0, 6);
alert(res);
 }

</script>
</html>

sexta-feira, 18 de julho de 2014

JavaScript - Try e Catch

Try e Catch

Tratamento de Exceções e Erros


Try Catch é utilizado para executar um código passivel de erro e caso ocorra o erro na instrução Try, será executada a instrução dentro de Catch
Um bloco try pode possuir vários blocos de catch

try {
  // código a ser executado
} catch (ClasseDeExceção instânciaDaExceção) {
  // tratamento da exceção
}

quarta-feira, 16 de julho de 2014

JavaScript - Verificar se uma data é maior, menor ou igual a data atual

Código para verificar se uma data é menor, maior ou igual a data atual.

var data = "12/10/2013";

      var objDate = new Date();
      objDate.setYear(data.split("/")[2]);
      objDate.setMonth(data.split("/")[1]  - 1);//- 1 pq em js é de 0 a 11 os meses
      objDate.setDate(data.split("/")[0]);

      if(objDate.getTime() > new Date().getTime()){
        alert("O dia passado é maior que a data atual..");
      }
      if(objDate.getTime() < new Date().getTime()){
        alert("A data atual deve ser maior que a data fim do período de emissão");
      }      
      if(objDate.getTime() == new Date().getTime()){
        alert("Datas Iguais");
      }

sexta-feira, 4 de julho de 2014

Retornar valores de duas colunas separados por determinado caracter

Neste caso, temos duas colunas:

Coluna Tipo   - possue varios tipos separados por "|"
Coluna Valor - possue varios valores separados por "|"

Para cada posição da coluna Tipo, deve-se pegar o valor correspondente da segunda coluna e realizar a soma conforme o tipo:

declare

  v_tp_pagamento owa_util.vc_arr;
  v_vl_pagamento owa_util.vc_arr;
  v_ca number := 0;
  v_cc number := 0;
  
begin
  for reg in (select 'EX|CCCA5549|CA' tipo
                    ,'0|376.66|855.52'     valor 
              from    dual
              union
              select 'EX|CCCA5549|CA' tipo
                    ,'0|356.32|154.32'     valor 
              from    dual) 
  loop
    v_tp_pagamento := fun_separa_texto(reg.tipo,'|');
    v_vl_pagamento := fun_separa_texto(reg.valor,'|');
    
    for x in v_tp_pagamento.first..v_tp_pagamento.last
    loop
      if v_tp_pagamento(x) = 'CA'
      then
        v_ca := v_ca + to_number(v_vl_pagamento(x), 'FM999999999990D90', 'NLS_NUMERIC_CHARACTERS=.,');
        dbms_output.put_line(v_vl_pagamento(x));
      elsif instr(v_tp_pagamento(x),'CC') > 0
      then
        v_cc := v_cc + to_number(v_vl_pagamento(x), 'FM999999999990D90', 'NLS_NUMERIC_CHARACTERS=.,');
        dbms_output.put_line(v_vl_pagamento(x));
      end if;
    end loop;
  end loop;
  
  dbms_output.put_line('v_ca := ' || v_ca);
  dbms_output.put_line('v_cc := ' || v_cc);
end; 


Resultado:

356.32
154.32
376.66
855.52
v_ca := 1009,84

v_cc := 732,98

Separar um texto após determinado caracter

Query para separar um texto após determinado caracter

select REGEXP_SUBSTR(str, exp, 1, level) lista
from (select 'BRASIL|CAMPEAO|DO|MUNDO' str, '[^|]+' exp 
      from dual) 
connect by REGEXP_SUBSTR(str, exp, 1, level) is not null;



sexta-feira, 27 de junho de 2014

JavaScript - Excluir Linha da Table

/****************************************************************
  Exclui linha da table
****************************************************************/
function excluiLinha(pObjImg)
{
  var oRow   = pObjImg.parentNode.parentNode;
  var oTable = oRow.parentNode;

  oTable.deleteRow(oRow.rowIndex);
}

JavaScript - Inserir Linha na Table

/***************************************************************
  Insere nova linha na table
****************************************************************/
function insereLinha()
{
  oTable = $("tb_");
  i = oTable.rows.length;
  oRow = oTable.insertRow(i);

  oCell = oRow.insertCell(0);
  oCell.innerHTML = '''';
  oCell.align = '''';
}

quinta-feira, 26 de junho de 2014

JavaScript - Verificar se um campo contem somente espaços

Código para percorrer uma lista de valores na tela e verificar se um determinado campo só contem espaços, caso positivo dar uma mensagem e não deixar prosseguir, para que o usuário digite um valor válido no campo.

Criar a função Trim

 function trim(pString) 
   {
     return pString.replace(/^\s+|\s+$/g, "");
   }            

 function gravar()
   {
     vArrayun = getArrayObjeto(document.forms[0], "input", "p_nm_campo");
     for (var i=0; i<vArrayun.length; i++)
       {
         //verifica se o campo está vazio
         if (vArrayun[i].value == "")
           {
             alert("Favor preencher todos os campos antes de clicar em gravar!");
             vArrayun[i].focus();
             return false;
           }
          
         // Verificar se o campo contem somente espaços           
         var entidade = vArrayun[i].value;                   
 entidade = trim(entidade);                       
                        
         if (entidade.length == 0) {
           alert("Não é permitido gravar uma entidade somente com espaços!!"); 
           vArrayun[i].focus();
   return false;
           }
       }

    document.frm_xxx.action = "pkg_xxxxx.prc_xxxx_grava";
    document.frm_xxx.submit();                   }     

  } 

Verificar Objetos Inválidos

SELECT OBJECT_TYPE
      ,OBJECT_NAME
      ,STATUS
FROM   DBA_OBJECTS 
WHERE STATUS = 'INVALID' 
AND   OWNER  = 'XXXXX';

quarta-feira, 4 de junho de 2014

PL/SQL - Exemplo de uma Package utilizando Type

Exemplo de uma Package utilizando Type

create or replace package PR_I_TESTE is


TYPE tRegra IS RECORD ( CAMPO1      NUMBER(8)    
                       ,CAMPO2      VARCHAR2(2000) 
                       ,CAMPO3      VARCHAR2(40) 
                       ,CAMPO4      VARCHAR2(40));
--

TYPE arrayRegra IS TABLE OF tRegra INDEX BY BINARY_INTEGER;

 procedure PRC_TESTE (p_Regra OUT PR_I_TESTE.arrayRegra );

end;


--------------------------------------------------------------------
create or replace package body PR_I_TESTE IS


 procedure PRC_TESTE (p_Regra OUT PR_I_TESTE.arrayRegra )IS  
   
   
  nIndexRegra number;


  begin
    p_Regra.Delete(); 
    nIndexRegra := 0;

    FOR X IN (select CAMPO1     
                    ,CAMPO2       
                    ,CAMPO3        
                    ,CAMPO4
             from    tabela_teste) LOOP
      --
      nIndexRegra := nIndexRegra + 1; 
      --
      p_Regra(nIndexRegra).CAMPO1:= X.CAMPO1;
      p_Regra(nIndexRegra).CAMPO2:= X.CAMPO2;
      p_Regra(nIndexRegra).CAMPO3:= X.CAMPO3;
      p_Regra(nIndexRegra).CAMPO4:= X.CAMPO4;
   
      dbms_output.put_line(nIndexRegra||'-'||p_Regra(nIndexRegra).CAMPO1||'-'||p_Regra(nIndexRegra).CAMPO2);
     
    
    end loop;
  end PRC_TESTE;

end ;


---------------------------------------------------------------

Para testar a procedure

DECLARE
  P_REGRA HR.PR_I_TESTE.ARRAYREGRA;
BEGIN

  PR_I_TESTE.PRC_TESTE(P_REGRA => P_REGRA);

END;

quarta-feira, 28 de maio de 2014

HTML - Desabilitar um Botão

<html>
  <form id="frm_teste" name="frm_teste" method="post" action="">
<head>
<title></title>
</head>
<body>
<p>
        <input type="button" Class="buttonnew" style="width:110;height:22" id="botao-consultar" name="botao-consultar" value="Consultar" >
        <input name="p_check_desabilitar" type="checkbox" onchange="desabilitar()" /> </span>&nbsp;Desabilitar Botão</p>
    </body>
  </form>

  <script type="text/javascript" src="/jscripts/jquery/jquery-1.6.3.min.js"></script>
  <script type="text/javascript">

  function desabilitar()
         {
            if (document.frm_teste.p_check_desabilitar.checked == true)
             {
               document.getElementById("botao-consultar").disabled = "disabled";
             }
           else
             {
               document.getElementById("botao-consultar").disabled = false;
             }
         }

  </script>

</html>

quarta-feira, 14 de maio de 2014

Check Constraint

Quando é necessário garantir que uma coluna tenha somente valores pré determinados, podemos utilizar a restrição CHECK.

Por exemplo, podemos determinar que a coluna Sexo, somente terá os valores "M" ou "F"
alter table clientes
add constraint ck01_clientes check (sexo in ('M', 'F'));

Garantindo que todo código de cliente seja maior que 1000
alter table clientes
add constraint ck02_clientes check (codigo > 1000);

Duas condições em um Check Constraint
alter table clientes
add constraint ck03_clientes check (renda > 0 and status in ('A','I'));

Excluindo uma Check Constraint
alter table clientes
DROP CONSTRAINT ck01_clientes; 

sexta-feira, 9 de maio de 2014

Gerar Arquivo CSV

Rotina para gerar arquivo CSV (Excel), permite abrir diretamente ou salvar na máquina.

  procedure prc_gera_csv ( p_parametro1    in varchar2
                         ,p_parametro2    in varchar2 ) is           

    rawBUFFER           RAW(32767);
    iTAMANHO            BINARY_INTEGER;
    v_blob              BLOB;  
    vSTRING             VARCHAR2(32767);
    v_nome_arq          VARCHAR2(1000);
    v_sql               VARCHAR2(2000);    
    v_campo_1           teste.v_campo_1%type;
    v_campo_2           teste.v_campo_2%type; 
    v_campo_3           teste.v_campo_3%type;
    v_cursor            SYS_REFCURSOR;
   
    
  begin  
     
    DBMS_LOB.createtemporary(v_blob,FALSE);  
        
    -- Cabecalho da planilha    
    rawBUFFER := UTL_RAW.cast_to_raw('CAMPO 1;' ||
                                     'CAMPO 2;' ||
                                     'CAMPO 3;' ||                                                                        
                                     CHR(13) || CHR(10));    
                                     
    iTAMANHO := UTL_RAW.length(rawBUFFER);
    DBMS_LOB.writeappend(v_blob, iTAMANHO, rawBUFFER);
    
    v_sql:= 'select campo_1                     
                   ,campo_2                     
                   ,campo_3       
             from   teste                  
             where  ...';  
    
    if p_parametro1 <> 'X' then
      v_sql := v_sql || ' and..... = ''' || p_parametro1 ||'''';
    end if;                 

    if p_parametro2 <> 'X' then
      v_sql := v_sql || ' and..... = ''' || p_parametro2 ||'''';
    end if;      
    
    v_sql:=  v_sql||' order by ...... ';   

    open v_cursor for v_sql;    
    loop     
      
      fetch v_cursor into  v_campo_1
                          ,v_campo_2
                          ,v_campo_3;
                         
                           
      exit when v_cursor%notfound;   
        
      vSTRING :=  v_campo_1  ||';' ||
                  v_campo_2  ||';' ||
                  v_campo_3  ||';' ||                                     
                  chr(13)||chr(10);

      rawBUFFER := UTL_RAW.cast_to_raw(vSTRING);
      iTAMANHO  := UTL_RAW.length(rawBUFFER);
      DBMS_LOB.writeappend(v_blob, iTAMANHO, rawBUFFER);
        
    end loop;    
    
    v_nome_arq := 'ARQUIVO_XXX';

    OWA_UTIL.mime_header('text/*',FALSE);
    htp.p('Content-Disposition: attachment; filename="'||v_nome_arq||'.csv"');

    htp.p('Content-length: ' || dbms_lob.getlength(v_blob));
    OWA_UTIL.http_header_close;

    WPG_DOCLOAD.download_file(v_blob);
    DBMS_LOB.freetemporary(v_blob);  
    RETURN;            

  end prc_gera_csv;  

quarta-feira, 7 de maio de 2014

Javascript - Função para somar valores decimais

Tive um problema com uma soma em javascript onde quando o resultado era entre 1,01 e 1,99 ele entendia que não era maior que 1, sendo necessário então tratar valores decimais com a função abaixo.

  function valida_campos(p_obj)
             
             { 
              //Se os campos estiverem vazios preencho com zero            
              if (document.frm_filtro.campo1.value == "")
                  {
                    document.frm_filtro.campo1.value="0,00";
                  }
                
              if (document.frm_filtro.campo2.value == "")
                  {
                    document.frm_filtro.campo2.value="0,00";
                  }                  
              
              var v_campo1 = document.frm_filtro.campo1.value;
              var v_campo2 = document.frm_filtro.campo2.value;
                
              v_campo1 = v_campo1.replace(",",".");
              v_campo2 = v_campo2.replace(",",".");

              var v_soma = (parseFloat(v_campo1) + parseFloat(v_campo2)).toFixed(2);                
              
              // A soma dos campos campo1 e campo2 não podem ser maiores que 1                  
              if ((v_soma) > 1 ) 
                 {
                   alert("Soma dos valores não podem ser maior que 1");
                   document.frm_filtro.campo1.value="0,00"; 
                   document.frm_filtro.campo2.value="0,00"; 
                   p_obj.focus();
                   return false;
                 }  

terça-feira, 6 de maio de 2014

SQL - Sequence

Comando para criar uma sequence:


create sequence seq_codigo
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
nocache;


Retornando os valores
select seq_codigo.nextval from dual;
select seq_codigo.nextval into v_codigo from dual;

Função para retornar um número formatado

Retorna um varchar do número para o formato monetário

function fun_formata_numero(p_numero in number) return varchar2 is

begin

  return trim(to_char(p_numero,'999G999G999G990D00','NLS_NUMERIC_CHARACTERS=,.'));

end;


-----
select fun_formata_numero(265253.98) from dual;
265.253,98

Javascript - Validar um campo numérico


Código para verificar se o usuário digitou apenas números em um campo numérico.

if  (! isnumber1 (document.frm_filtro.campo.value))
      {
         alert("Campo Numérico.");                   
         document.frm_filtro.campo.value="0";
         p_obj.focus();
         return false;
      }      

Criar a função abaixo:

function isnumber1(n)
  {
    for(var i=0; i < n.length; i++)
      {
        var c = n.charAt(i);
        if (( c < "0") || (c > "9"))
          {
            if ((c!=",")||(c!="."))
              {
                return (false);
              }
          }
      }
      return true;

  }         

quinta-feira, 17 de abril de 2014

View - insert, update, delete

É possível realizar operações DML em tabelas utilizando uma view, desde que na query da view não exista join, group by, union, start with, connect by, distinct...


Criando uma tabela e inserindo 3 registros:

create table teste1
(id_teste number,
nm_teste varchar2(30));
Table created.

insert into teste1 
values(1, 'LARANJA');
1 linhas inserido.

insert into teste1 
values(2, 'BANANA');
1 linhas inserido.

insert into teste1 
values(3, 'PERA');
1 linhas inserido.



Realizando operações DML na view:

CREATE OR REPLACE VIEW VW_TESTE1
AS
SELECT ID_TESTE,
       NM_TESTE
FROM TESTE1;
view VW_TESTE1 criado.

UPDATE VW_TESTE1
SET    NM_TESTE = 'ABACATE'
WHERE ID_TESTE = 3;
1 linha atualizado.

DELETE VW_TESTE1
WHERE ID_TESTE = 3;
1 linha deletado.

INSERT INTO VW_TESTE1
VALUES(3, 'LIMAO');
1 linha inserido.

terça-feira, 1 de abril de 2014

VARRAY e ARRAY

Varray é um conjunto ordenado de elementos de dados. Todos os elementos de um varray são do mesmo tipo de dados. Cada elemento tem um índice, que é um número que corresponde à posição do elemento na matriz. 

Na declaração do Varray é necessário informar a quantidade máxima de elementos que serão armazenados, o valor mínimo é 1. O número de elementos de uma matriz é o tamanho da matriz. Oracle permite matrizes para ser de tamanho variável, que é por isso que eles são chamados varrays.


DECLARE
  --Declara o Varray, define o tamanho máximo e inicializa
  TYPE V_VARRAY IS VARRAY(10) OF VARCHAR2(100);
  L_CAMPEAO V_VARRAY := V_VARRAY( 1958, 1962, 1970, 1994, 2002);

BEGIN
  FOR I IN 1..L_CAMPEAO.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('O Brasil foi campeão do mundo em: ' ||L_CAMPEAO(I));
  END LOOP;
END;

Resultado: 
O Brasil foi campeão do mundo em: 1958
O Brasil foi campeão do mundo em: 1962
O Brasil foi campeão do mundo em: 1970
O Brasil foi campeão do mundo em: 1994
O Brasil foi campeão do mundo em: 2002

---------------------------------------------------------------

Verificando o tamanho de um Varray

DECLARE

  TYPE coll_method_demo_t IS TABLE OF NUMBER;
  l_loc_var coll_method_demo_t := coll_method_demo_t (10,20,30,40);

BEGIN
  DBMS_OUTPUT.PUT_LINE('O tamanho do Varray é: '||l_loc_var.count);
END;

Resultado:
O tamanho do Varray é:  4

---------------------------------------------------------------

Verificando quantos elementos tem um Varray e quantos poderia ter 

DECLARE

  TYPE coll_method_demo_v IS VARRAY(10) OF NUMBER;
  L_ARRAY1 coll_method_demo_v := coll_method_demo_v (10,20,30,40);

BEGIN
  DBMS_OUTPUT.PUT_LINE('O varray tem '||L_ARRAY1.COUNT||' elementos');
  DBMS_OUTPUT.PUT_LINE('O varray pode ter '||L_ARRAY1.LIMIT||' elementos');  
END;

Resultado:
O varray tem 4 elementos
O varray pode ter 10 elementos

---------------------------------------------------------------
FIRST e LAST

Retornando o primeiro e último elemento de um Array

DECLARE

  TYPE coll_method_demo_t IS TABLE OF NUMBER;
  L_ARRAY coll_method_demo_t := coll_method_demo_t (10,20,30);

BEGIN
  DBMS_OUTPUT.PUT_LINE('Primeiro elemento do array: '|| L_ARRAY (L_ARRAY.FIRST));
  DBMS_OUTPUT.PUT_LINE('Último elemento do array: '|| L_ARRAY (L_ARRAY.LAST));
END;

Resultado:
Primeiro elemento do array: 10
Último elemento do array: 30

---------------------------------------------------------------

ARRAY


Exemplo de um Array (Vetor) (grupo de posições contínuas em memória que possuem o mesmo nome e o mesmo tipo).


DECLARE

  TYPE string_asc_arr_t IS TABLE OF NUMBER
  INDEX BY VARCHAR2(10);
  
  l_str   string_asc_arr_t;
  l_idx   VARCHAR2(50);

BEGIN

  l_str ('Marcelo')   := 9.50;
  l_str ('Juliana')   := 7.5;
  l_str ('Alexandre') := 8;
  l_str ('Luiza')     := 6.5;
  l_str ('Tiago')     := 7;
  l_idx := l_str.FIRST;
  
  WHILE (l_idx IS NOT NULL) LOOP
    DBMS_OUTPUT.PUT_LINE('A nota do(a) '||l_idx||' é '||l_str(l_idx));
    l_idx := l_str.NEXT(l_idx);
  END LOOP;
END;


Resultado:
A nota do(a) Alexandre é 8
A nota do(a) Juliana é 7,5
A nota do(a) Luiza é 6,5
A nota do(a) Marcelo é 9,5
A nota do(a) Tiago é 7

--------------------------------------------------------------

Preenchendo um array automaticamente.

DECLARE

  TYPE RAIZ_QUADRADA_T IS TABLE OF number
  INDEX BY PLS_INTEGER;
  RAIZ_QUADRADA RAIZ_QUADRADA_T;

BEGIN

  FOR I IN 1..100 LOOP    
    raiz_quadrada(I) := SQRT(I);            
  END LOOP;

  -- Mostrando somente os valores desejados:
  DBMS_OUTPUT.PUT_LINE('A raiz quadrada de '||1||' é '|| raiz_quadrada(1)); 
  DBMS_OUTPUT.PUT_LINE('A raiz quadrada de '||2||' é '|| raiz_quadrada(2)); 
  DBMS_OUTPUT.PUT_LINE('A raiz quadrada de '||3||' é '|| raiz_quadrada(3)); 
  DBMS_OUTPUT.PUT_LINE('A raiz quadrada de '||25||' é '|| raiz_quadrada(25)); 
  DBMS_OUTPUT.PUT_LINE('A raiz quadrada de '||40||' é '|| raiz_quadrada(40));    

END;

Resultado:
A raiz quadrada de 1 é 1
A raiz quadrada de 2 é 1,41421356237309504880168872420969807857
A raiz quadrada de 3 é 1,73205080756887729352744634150587236694
A raiz quadrada de 25 é 5
A raiz quadrada de 40 é 6,32455532033675866399778708886543706744

--------------------------------------------------------------

PRIOR e NEXT


DECLARE

  TYPE coll_method_demo_t IS TABLE OF NUMBER;
  L_ARRAY coll_method_demo_t := coll_method_demo_t(12,15,25,32,44,57,68);

BEGIN  
  DBMS_OUTPUT.PUT_LINE('Element before 5th element: '||L_ARRAY(L_ARRAY.PRIOR(6)));
  DBMS_OUTPUT.PUT_LINE('Element after 6th element: '||L_ARRAY(L_ARRAY.NEXT(3)));
END;

Resultado:
Elemento anterior 6º elemento: 44
Elemento posterior 3º elemento: 32