Thinking on hiring me?

Please read

Fernando Guillén

a Freelance Web Developer

cabecera decorativa

software development as an artistic expression

Archive for the ‘mysql’ Category

Martes, Abril 8th, 2008

Procedimiento almacenado con cursor en MySQL

Aquí dejo el código de un procedimiento almacenado de MySQL que usa un cursor.

Esto no es un tutorial es una nota mental.

DROP procedure IF EXISTS test_cursor
/
 
CREATE procedure test_cursor()
 
begin
 
--
-- variables
--
declare hasMoreRows bool DEFAULT true;
declare _field1 varchar(20);
declare _field2 varchar(20);
 
--
-- the cursor
--
declare cur cursor FOR
 
  SELECT
      cl.LIBRARY_NAME,
      cl.LIBRARY_DESCRIPTION
  FROM
      CAT_LIBRARIES AS cl
  ;
 
declare continue handler FOR SQLSTATE '02000'
    SET hasMoreRows = false;
 
--
-- create table test
--
DROP TABLE IF EXISTS test_cursor;
 
CREATE TABLE `test_cursor` (
  `field1`  varchar(20) NULL,
  `field2`  varchar(20) NULL
);
 
--
-- open the cursor
--
open cur;
 
fetch cur INTO
  _field1,
  _field2;
 
while hasMoreRows do
 
--
-- ####### WALK:INI ########
--
 
  INSERT INTO
      test_cursor
  SET
    field1 = _field1,
    field2 = _field2
  ;
 
--
-- ####### WALK:END ########
--
 
  fetch cur INTO
    _field1,
    _field2;
 
end while;
 
close cur;
 
end;
/

Aquí está el fichero con el código fuente.

Martes, Julio 24th, 2007

Last ID, iBATIS y MySql

Adicto como soy a las claves primarias auto-incrementales en MySql me perseguía el problema de no saber cuál era el ID con el que el último registro había sido insertado.

Esto me obliga a hacer indecorosos malabarismos para conseguirlo: sincronizar el método y solicitar el último ID insertado justo después de la inserción, solicitar la ID del registro por algún otro campo de clave única…

Hoy me dá por googlear un poco y me encuentro con una joyita del 2005 entre los archivos de una lista de correo.

Aquí está la solución para que la propia llamada al ‘insert’ te retorne el ID creado:

Si por ejemplo tenemos esta sentencia ‘insert’ en nuestro fichero de iBATIS:

	<insert
		id="insertSentence"
	>
		insert into
			MY_TABLE (
				FIELD_1,
				FIELD_2
			)
			values (
				#value1#,
				#value2#
			)
	</insert>

Hay que modificarla de esta manera:

	<insert
		id="insertSentence"
	>
		insert into
			MY_TABLE (
				FIELD_1,
				FIELD_2
			)
			values (
				#value1#,
				#value2#
			)
		<selectKey
			resultClass="long"
			keyProperty="ID"
		>
			select LAST_INSERT_ID()
		</selectKey>
	</insert>

Y el ID podrás recogerlo desde la llamada al mapeador de iBATIS:

Long key =
	(Long)
	sqlMap.insert( "insertSentence" );

Ahora soy un poquitín más feliz… espero que tú también.

a Freelance Web Developer is proudly powered by WordPress
Entries (RSS) and Comments (RSS).

Creative Commons License
Fernando Guillen's blog by Fernando Guillen is licensed under a Creative Commons Attribution-NoDerivs 3.0 Unported License.