A parte de un conjunto de datos que puede devolver un Stored Procedure en SQL Server, también podemos hacer que ellos devuelvan uno o varios valores escalares, un caso tipico es cuando insertamos un registro y la tabla tenia una PK Identity, si queremos recuperar esa clave podemos usar este mecanismo, aunque no necesariamente se reduce a esa posibilidad, con un poco de imaginación podemos darle usos en otras situaciones. El ejemplo que muestro esta construido con SQL Server, pero es funcional con otros motores que manejan el retorno de valores escalares en sus procedimientos almacenados..
1 2 3 4 5 6 7 8 9 10 11 | CREATE PROCEDURE InsCliente @IdCliente INT OUTPUT, @Nombre VARCHAR(25), @Ruc VARCHAR(25) AS BEGIN -- Insertamos un registro INSERT INTO Cliente VALUES (@Nombre, @Ruc); -- Recuperamos el Id que se genero SELECT @IdCliente = @@Identity; END |
Tomando en cuenta este procedimiento que tiene demasiados atributos para cliente
¿Cómo hacemos para capturar ese valor sin utilizar un ResultSet (Esto funcionaría pero no sería elegante), podemos hacerlo del siguiente modo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public static void CrearCliente(java.sql.Connection con) { try { // instanciamos el objeto callable CallableStatement cstmt = con.prepareCall("{call dbo.InsCliente(?, ?, ?)}"); // seteamos los parametros de entrada cstmt.setString(2, "Jose Morales"); cstmt.setString(3, "DKFF4543-2"); // registramos el parametro de retorno (si fueran mas, repetimos la linea cambiando el nro de orden del parametro) cstmt.registerOutParameter(1, java.sql.Types.INTEGER); // ejecutamos cstmt.execute(); // mostramos al usuario el codigo creado System.out.println("Se creo el Cliente con Codigo: " + cstmt.getInt(1)); } catch (Exception e) { e.printStackTrace(); } } |
Articulos Relacionados:









en
en
en
en
quiero compartir un ejemplo cuando el procedimiento devuelve valores:
connMY = DBConexion.conectar(“localhost”, “farmacia”, “farmacia”, “farmacia”);
connMY.setAutoCommit(false);
CallableStatement prcLogin = connMY.prepareCall(“{ call pa_login(?,?,?) }”);
prcLogin.setString(1,”100″);
prcLogin.setString(2,”100″);
prcLogin.registerOutParameter(3, java.sql.Types.INTEGER);
prcLogin.execute();
System.out.println(“el usuario con codigo?” + prcLogin.getInt(3));
Como llamar a un procedure en sql server 2005 dependiendo de lo que esta seleccionado en jcombobox????????????,gracias
PD:¿como envio mi codigo java?
wooo muchas gracias men, en realidad me ayudaste demasiado =D!!!!
si esto fuera con votos… tendrias mi +1000 =D!!!
@Dracox3 y @JC que bueno que les haya servido, que dejen sus comentarios me alientan a seguir escribiendo
Muchisimas gracias! simple y claro, sigue posteando….
Gracias… me sacaste un dolor de cabeza!!!!