Translate

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