martes, 28 de diciembre de 2021

Tutorial Oracle PL-SQL (II)

16. Triggers

Un trigger ejecuta automáticamente un código cada vez que se realiza una acción concreta sobre la base de datos.

  • Puede revisar las inserciones y modificaciones en la tabla para asegurar la coherencia de datos
  • Registra todos los cambios realizados y el usuario que los hizo 
  • No pueden ser invocados directamente, son procesos automáticos
  • No devuelven ni reciben parametros
  • No devuelven consultas sql

 

Tipos de triggers:

  • before: se ejecutan antes de la acción sobre la base de datos
  • after: se ejecutan después de la acción sobre la base de datos
  • de evento: pueden ser por un insert, update o delete
  • de nivel: a nivel de fila afectada por la acción ó a nivel de sentencia que puede afectar a varias filas

 

Ejemplo de disparador tipo before, antes del evento insert.


 create or replace trigger tr_entrada_diario
before insert
on libros
begin
    insert into control values ( user, sysdate);
end tr_entrada_diario;

 

Si se insertan un registro en la tabla con dos usuarios diferentes quedará registrado automaticamente en la tabla control

Desde usuario ARTURO
 insert into libros 
values( 1, 'Harry Potter y la camara secreta','J. K. Rowling','everest',20.50);
Desde usuario SYSTEM
  insert into ARTURO.libros 
values( 2, 'Harry Potter y la orden del fenix','J. K. Rowling','everest',20.50);

18. Triggers FOR EACH ROW

Otro ejemplo es cuando se borran registros. En el caso que se borren libros, por cada libro borrado se escribe un registro en la tabla CONTROL.

  create or replace trigger tr_borrado_libro
before delete
on libros
for each row
begin
    insert into control values (user, sysdate,'BORRADO');
end tr_borrado_libro;
-- Una vez creado el disparador se borra un registro de la tabla libros
DELETE from ARTURO.LIBROS where CODIGO = 5;

lunes, 27 de diciembre de 2021

Tutorial Oracle PL-SQL (I)

1. Secciones de un bloque pl-sql:


DECLARE

- - sección declarativa, se declaran variables, constantes y cualquier dato accesible en todo el bloque

BEGIN

- - (obligatoria) sección ejecutable, inicia las sentencias del pl


EXCEPTION

- - sección de control de errores y de resultados no esperados
END;
- - (obligatoria) fin del pl

1.1. Tipos de bloque pl-sql

Sin nombre: Se construyen dinámicamente dentro de otro pl y se guardan en memoria.

BEGIN
   DBMS_OUTPUT.PUT_LINE('nombre');
END;



Con nombre: Son funciones o procedimientos con nombre y se guarda en la propia base de datos. Empiezan así:

CREATE OR REPLACE PROCEDURE ver_usuario(nomusu VARCHAR2) 


2. Variables

Primero hay que habilitar la salida de script en la pantalla del editor, así podremos mostrar mensajes y depurar el código

set serveroutput on;

Creamos variables en la sección DECLARE



   DECLARE

    edad integer := 50;
-- define un número entero llamado edad y le asigna el valor 50

    nombre varchar2(40) := 'John Doe';
-- define un texto con tamaño máximo 40 y le asigna un valor

    id char(7) := 'AD00014';
-- define un texto con tamaño fijo de 7 y le asigna un valor

    sueldo number(7,2) := 35000,00;
-- define un tamaño total y cuantas posiciones serán decimales. 
-- En el ejemplo de 7 posiciones, 5 son enteros y 2 serán decimales fecha_actual date := sysdate; -- define una variable de tipo fecha y le asigna la fecha actual del sistema fecha_nacimiento date := to_date('23/05/1971','dd/mm/yyyy'); -- Define una variable tipo fecha asignándole la fecha desde un formato concreto cargo varchar2(50) default 'Empleado'; -- variable tipo texto con un valor por defecto


Mostramos el valor de las variables en la sección BEGIN



BEGIN

 dbms_output.put_line(‘Nombre : ‘ || nombre);
-- usa una función del sistema dbms_output para mostrar el nombre
-- La dos barras || encadenan un texto entre comillas simples con el valor de 
la variable nombre


PL completo.



DECLARE
    edad integer := 50;
    nombre varchar2(40) := 'John Doe';
    id char(7) := 'AD00014';
    sueldo number(7,2) := 35000.00; 
    fecha_nacimiento date := to_date('23/05/1971','dd/mm/yyyy');
    cargo varchar2(50) default 'Empleado';
BEGIN
    DBMS_OUTPUT.PUT_LINE(nombre || '. ' || edad ||' años de edad');
    DBMS_OUTPUT.PUT_LINE('Nació el ' || fecha_nacimiento);
    DBMS_OUTPUT.PUT_LINE(cargo || ' ID-' || id || ', salario ' ||
sueldo || ' €/año'); END;



Salida por consola:

John Doe. 50 años de edad
Nació el 23/05/71
Empleado ID-AD00014, salario 35000 €/año

Procedimiento PL/SQL terminado correctamente.


Placa con letras 3d

 

Placa con letras 3d en mesa de madera


El cubo inicial es de 2m, lo usamos de mesa de despacho. Lo reducimos escalando para las proporciones para un tablero y le ponemos nombre. Después lo ocultamos para que no estorbe al hacer la placa que será mucho más pequeña



El texto se añade con Add → Text

Para editar el texto nos vamos a modo edición “Edit mode” 

 

 

 


Y para la extrusión, tipo de letra, alineación … seleccionando el texto y en la ventana de herramientas buscamos propiedades del texto.

 


 

Extruimos y cambiamos el tipo de letra. Ya solo queda colocarlo todo y empezar con texturas e iluminación

 

 


 

 

Estructura de nodos para la textura de madera

 


 

 

 

Render final

 


 

 

 

 

 

 

 

 


Puzzle infantil

 

Puzzle infantil de seis piezas


Pinchando con el botón derecho en el borde del area de dibujo ponemos “split” para dividr la vista en dos. Hacemos lo mismo en horizontal y vertical para tener cuatro vistas a la vez.

 



 

 

Vamos cambiando la ventana con la tecla “ º ” hasta tener las vistas deseadas.

 


 

Creamos una curva → Menu add → curve bezier

Después pasamos del modo select object al modo edit object


Triangulo: cilintro con 3 caras

Circulo: cilindro

Cuadrado: cubo

Pentagono: cilintro con 5 lados

Rentanculo: cubo escalado en un eje

Estrella: cilindro de 10 lados, se escalan los lados alternos

 


 

 

Texturas:


Pestaña material por defecto sin material añadido

 


Para usar el compositor de nodos hay que crear una vista nueva ( split area) y elegir el editor shader editor



En el editor de nodos se crean inputs que se pueden mezclar con Mix shader y se asigan al nodo Output


Ejemplo de material mezcla de textura de madera con color rojo asignado al tablero.

 

 


 

Operaciones booleanas recorte.


Seleccionar el objeto a recortar → Add modificador → Boolean → seleccionar el objeto que corta y aplicar

 


 

Modificador torno:


Creamos una curva bezier → add → curve → bezier

La colocamos recta en la vista frontal.

Pasamos a Edit mode para recolocar los puntos y los modificadores. Para añadir más puntos de control : CTRL + Botón derecho.

Para el torneado → Modificador ( llave inglesa) → screw → Ajustar el eje y las caras .

 



Mapeo de texturas:


Necesita un nodo de imagen, para cambiar el color se usa en MixSader y para las coordenadas un nodo Mapping + nodo texture mapping