Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un procedimiento es un subprograma que ejecuta una acción especifica y que no devuelve ningún
valor. Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de
código. La sintaxis de un procedimiento almacenado es la siguiente:
CREATE OR REPLACE
PROCEDURE Actualiza_Saldo(cuenta NUMBER,
new_saldo NUMBER)
IS
-- Declaración de variables locales
BEGIN
-- Sentencias
UPDATE SALDOS_CUENTAS
SET SALDO = new_saldo,
FX_ACTUALIZACION = SYSDATE
WHERE CO_CUENTA = cuenta;
END Actualiza_Saldo;
Ejemplo de creación de un procedimiento CREATE OR REPLACE PROCEDURE
END contratar_empleado;
En este procedimiento se ha definido el tipo de dato de los parámetros de entrada como del
mismo tipo que los campos de la tabla “emp” , es decir:
Procedimientos[editar]
Los procedimientos tienen la utilidad de fomentar la reutilización de programas que se
usan comúnmente. Una vez compilado, queda almacenado en la base de datos (por
eso es también llamado 'Procedimiento almacenado') y puede ser utilizado por
múltiples aplicaciones.
La sintaxis es la siguiente
Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el valor
IN si no se pone nada. IN indica que el parámetro es de entrada y no se podrá
modificar. OUT indica que el parámetro es de salida con lo que el procedimiento
devolverá un valor en él. IN OUT indica que el parámetro es de entrada/salida. Con lo
que al llamar al procedimiento se le dará un valor que luego podrá ser modificado por
el procedimiento y devolver este nuevo valor.
"tipodatos_parametro indica el tipo de datos que tendrá el parámetro según lo indicado
en Tipos de datos Oracle/PLSQL
Para borrar un procedimiento almacenado de la base de datos
DECLARE
nombre_parametro tipodatos_parametro;
BEGIN
nombre_parametro tipodatos_parametro :=
valor_de_inicializacion;
nombre_procedimiento (nombre_parametro =>
nombre_parametro);
END;
/
PROCEDIMIENTOS:
Los procedimientos PL/SQL son muy parecidos a otros procedimientos en otros lenguajes de
programación.
Ejemplo de inserción de un registro compuesto por un número entero dado y una cadena, (i,
‘xxx’):
1 CREATE TABLE T2 (
2 a INTEGER,
3 b CHAR(10)
4 );
7 BEGIN
9 END addtuple1;
10 .
11 run;
Un procedimiento se indica mediante las palabras clave CREATE PROCEDURE seguido del
nombre y sus parámetros. Opcinal es continuarlo de CREATE seguido de OR REPLACE. Esto
permitirá crear o reemplazar el procedimiento, si existe previamente, sin advertencias.
Puede haber un número ilimitado de parámetros, seguidos de un modo y un tipo. Los modos
posibles son:
NOTA: A diferencia del tipo especificado en la declaración de una variable PL/SQL, el tipo especificado en la decla
NO puede tener restricciones. Por ejemplo, VARCHAR(10) o CHAR(2) NO son válidos; deberían usarse los tipos CH
lugar. La longitud depende del parámetro que se pase cuando el procedimiento es invocado.
El “run;” tras un procedimiento, no lo ejecuta, sino que tan sólo ejecuta la sentencia que crea el
procedimiento. Para ejecutar el procedimiento hay que usar otra sentencia PL/SQL, en la que el
procedimiento es invocado como una sentencia de ejecución.
Ejemplo 1:
1 /* -- El siguiente procedimiento inserta una tupla en T2, pero toma ambos componentes como
2 argumentos -- */
4 BEGIN
6 VALUES(x, y);
7 END addtuple2;
.
8
run;
9
10
/* -- Ahora añade el registro (10, 'abc') a T2: -- */
11
BEGIN
12
addtuple2(10, 'abc');
13
END;
14
.
15
run;
Ejemplo 2: Con parámetro OUT.
3 b INTEGER);
5 /* -- Procedimiento -- */
7 BEGIN
8 b := 4;
10 END;
11 .
12 run;
13
14 /* -- Invocación al procedimiento -- */
15 DECLARE
16 v NUMBER;
17 BEGIN
18 addtuple3(10, v);
19 END;
20 .
21 run;
NOTA: Cuando usemos OUT o INOUT, no se puede usar una constante, ya que su valor
cambiará.
CREATE OR REPLACE
PROCEDURE Actualiza_Saldo(cuenta NUMBER, new_saldo NUMBER)
IS
-- Declaracion de variables locales
BEGIN
UPDATE SALDOS_CUENTAS
SET SALDO = new_saldo,
FX_ACTUALIZACION = SYSDATE
WHERE CO_CUENTA = cuenta;
END Actualiza_Saldo;
También podemos asignar un valor por defecto a los parámetros, utilizando la
cláusula DEFAULT o el operador de asignación (:=).
CREATE OR REPLACE
PROCEDURE Actualiza_Saldo(cuenta NUMBER, new_saldo NUMBER DEFAULT 10)
Notación posicional
Se pasan los valores de los parámetros en el mismo orden en que el procedure los
define.
BEGIN
Actualiza_Saldo(200501,2500);
COMMIT;
END;
Notación nominal
Ejemplos:
CREATE OR REPLACE PROCEDURE today_is AS
BEGIN
DBMS_OUTPUT.PUT_LINE( 'Hoy es ' || TO_CHAR(SYSDATE, ' DD/MM/YYYY') );
END today_is;
-- para ejecutarlo
SET SERVEROUTPUT ON;
BEGIN
today_is(); -- the parentheses are optional here
END;
CREATE OR REPLACE PROCEDURE today2_is ( fecha DATE ) AS
BEGIN
DBMS_OUTPUT.PUT_LINE( 'Hoy es ' || TO_CHAR(fecha, ' DD/MM/YYYY') );
END;
-- para ejecutarlo
SET SERVEROUTPUT ON;
BEGIN
today2_is(to_date('01/02/2008')); -- the parentheses are optional here
END;
-- para ejecutarlo
SET SERVEROUTPUT ON;
BEGIN
today2_is(fecha => to_date('01/02/2008')); -- the parentheses are optional
here
END;
EXECUTE ver_usuario('Luis');
BEGIN
ver_usuario('Luis');
END;
.
Como en cualquier lenguaje, podemos agregar comentarios a
nuestros procedimientos de la siguiente forma: