U6 PLSql
El PL/SQL es un lenguaje de programación de Oracle, que permite que el código sea ejecutado en el servidor Oracle mismo. Para códigos que necesitan muchas manipulaciones de datos, el PL/SQL es muy eficiente ya que se ejecuta localmente, con acceso directo a los datos.
El PL/SQL no es CASESENSITIVE, es decir, no diferencia mayúsculas de minúsculas como otros lenguajes de programacióncomo C o Java. Sin embargo debemos recordar que ORACLE es CASESENSITIVE en las búsquedas de texto (hasta la versión 10.2R2 que lo permite mediante nuevas valores para variables NLS_SORT y NLS_COMP).
Las instrucciones PL/SQL terminan con un puntocoma (;), excepto algunas instrucciones con BEGIN, DECLARE, etc..
Los comentarios de una línea se inician con – y los de varias líneas inician con /* yterminan con */
Bloque anónimo PL/SQL
Un bloque PL/SQL es un conjunto de instrucciones PL/SQL relacionadas entre ellas.
Un simple bloque PL/SQL inicia con BEGIN y termina con END;
Ejemplo:
SET SERVEROUTPUT ON;
BEGIN
dbms_output.put_line('Hola');
END;
/
Identificadores
Un identificador es el nombre de un objeto PL/SQL, como por ejemplo una constante, variable, excepción, paquete, función,procedimiento, tabla, cursor,...
Un identificador puede tener hasta 30 caracteres, debe iniciar con una letra. Puede contener los signos $ o #, pero no puede contener operadores (+%=/*...) ni ser igual a una palabra reservada.
La lista de palabras reservada se encuentra en la vista V$RESERVED_WORDS.
Variables
Las variables se declaran antes de la palabra BEGIN, y se preceden de la palabra DECLARE.
Lasintaxis es : nombre_de_variable [CONSTANT] tipo [NOT NULL] [DEFAULT valor_por_defecto];
Ejemplo:
DECLARE
counter BINARY_INTEGER := 0;
priority VARCHAR2(8) DEFAULT 'LOW';
...
Tipos de variables
Los tipos de variables que se pueden usar en PL/SQL son básicamente los mismos que se usan para definir campos en una tabla, plus algunos específicos del PL/SQL.
PLS_INTEGER: tipo numérico del PL/SQL, equivalentea NUMBER, pero más eficiente si se necesita hacer cálculos aritméticos.
%TYPE: refiere de manera dinámica a otro objeto.
%ROWTYPE: refiere de manera dinámica a una fila de una tabla.
Ejemplo:
set serveroutput on;
DECLARE
v_fname varchar2(40);
begin
select first_name into v_fname from employees where employee_id=206;
dbms_output.put_line('Nombre='||v_fname);
end;
/
Tipos personalizados
Es posiblecrear sus propios tipo de datos. Los tipos personalizados están fuera del alcance de este curso ya que se miran en un curso de PL/SQL avanzado.
Variables locales
Por defecto, una variable solo está disponible en el bloque PL/SQL donde se encuentra, y los sub bloques dentro de este bloque.
Ejemplo:
DECLARE
v_cnt_emp number;
BEGIN
select count(*) into v_cnt_emp
from employee
where salary>1000;
BEGINdbms_output.put_line ('Empleados con salario>1000 : '||v_cnt_emp);
END;
END;
/
Variables globales
Las variables globales son variables que se pueden llamar desde otro código.
Solo están disponibles en paquetes, pero están fuera del alcance de este curso ya que se miran en un curso de PL/SQL avanzado.
Control de flujo
If..elsif...else
Se usa el IF..ELSIF..ELSE para controlar el flujo en PL/SQL.
IF(expresion) THEN
-- Instrucciones
ELSIF (expresion) THEN
-- Instrucciones
ELSE
-- Instrucciones
END IF;
Ejemplo:
DECLARE
v_cnt_emp number;
v_tot_emp number;
BEGIN
select count(*) into v_tot_emp
from employees;
dbms_output.put_line ('Hay un total de '||v_tot_emp||' empleados.');
select count(*) into v_cnt_emp
from employees
where salary>1000;
dbms_output.put_line ('Hay '||v_cnt_emp||' empleadosque ganan más de 1000 $.');
dbms_output.put_line ('Resultado de la análisis.');
IF (v_tot_emp=v_cnt_emp) then
dbms_output.put_line ('Los empleados ganan todos más de 1000 $');
ELSIF (v_tot_emp
ELSE
dbms_output.put_line ('Menos de la mitad empleados ganan todos más de 1000 $');
END IF;
END;
/
Case
Es...
Regístrate para leer el documento completo.