lunes, 27 de junio de 2011

Tunning SQL Oracle: 6ta Sesión

Cursores

Se puede reemplazar el open , close y fetch usando for

CREATE OR REPLACE FUNCTION SF_REFCURSOR
RETURN SYS_REFCURSOR IS
CV SYS_REFCURSOR;
V_SQL VARCHAR2(100);
BEGIN
V_SQL:=
'SELECT EMPLOYEE_LAST_NAME FROM EMPLOYEES';
OPEN CV FROM V_SQL;
END;

sqlplus/nolog
connect hr/hr
variable cv refcursor
execute :cv := sf_refcursor
print cv


Otro Ejempo:

DECLARE
v_correo employees.email%TYPE:='';
n_salario employees.salary%TYPE :=1000;
TYPE typEmp IS TABLE OF employees%ROWTYPE
   INDEX BY employees.email%TYPE;
l_empleado typEmp;
PROCEDURE cargaArreglo IS
FOR reg IN (SELECT * FROM employees) LOOP
  l_empleado(reg.email) := reg;
END LOOP;
END;
BEGIN
cargaArreglo; -- Deberia estar en un Package y ser invocado la primera vez
IF l_empleado(v_correo).salary > n_salario THEN
   DBM_OUTPUT.PUT_LINE(l_empleado(v_correo).last_name  ||'SUPERA EL MONTO');
ELSE
   DBMS_OUTPUT.PUT_LINE(l_empleado(v_correo).last_name||'NO SUPERA EL MONTO');
END IF;
END;




4. Afinamiento Pl/Sql


Modularizar el Codigo
Usar PLS_INTEGER que es más eficiente que usar INTEGER, xq usa aritmetica de CPU y no de Librerias.
Usar y recorrer las colecciones en vez de los cursores con BULK

También se usan las colecciones para manejar las excepciones de error BULK_EXCEPTIONS


5. Características del Motor

La Base de datos puede manejar políticas de acceso a tablas agregando predicados luego del WHERE.
Para esto se personalizan Contextos y evitamos modificar las aplicaciones a las que accede un usario para temas de seguridad.

CREATE CONTEXT

Para cargar la Política se usa DBMS_RLS.ADD POLICY

6. Profiling

Para Monitorieo de Packages. Se usa el Package DBMS_PROFILER
Buscar siempre en la vista USER_SOURCE para ver qué linea da el problema que sale en el profiling

No hay comentarios:

Publicar un comentario