Saltar la navegación

5.7.2.- Ejecución de procedimientos almacenados en la base de datos Oracle.

Tomando un procedimiento de almacenamiento tal que:

CREATE OR REPLACE PROCEDURE remove_emp (employee_id NUMBER) AS
   tot_emps NUMBER;
   BEGIN
      DELETE FROM employees
      WHERE employees.employee_id = remove_emp.employee_id;
   tot_emps := tot_emps - 1;
   END;
/

Para ejecutar el procedimiento de almacenamiento de arriba:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class EjemploProcAlmacenado1 {

	public static void main(String[] args) {

		Connection cn = null;

		try {
			// Carga el driver de oracle
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

			// Conecta con la base de datos XE con el usuario scott y la contraseña tiger
			cn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "scott", "tiger");

			// Llamada al procedimiento almacenado
			CallableStatement cst = cn.prepareCall("{call remove_emp (104)}");
			// Ejecuta el procedimiento almacenado
			cst.execute();
			System.out.println("borrado");
		        cst.close();
                } catch (SQLException ex) {
			System.out.println("Error: " + ex.getMessage());
		} finally {
			
			try {

				cn.close();
			} catch (SQLException ex) {
				System.out.println("Error: " + ex.getMessage());
			}
		}
	}
}
En el código:
  • Las llamadas a los procedimientos almacenados al igual que las PreparedStatements y las consultas simples se hacen sobre la conexión, en este caso con el método prepareCall() que nos devuelve un CallableStatement. 
  • La llamada al procedimiento almacenado además de ir entre comillas por ser un string tiene que ir también entre llaves y tiene el siguiente formato “{call nombre_procedimiento(params)}”, dando los  parámetros reales espera  el procedimiento almacenado. 
  • El procedimiento se ejecuta cuando llamamos al método execute, y como es lógico en el momento en el que se ejecute tienen que estar definidos todos los parámetros tanto de entrada como de salida.