Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Para que sirve la clausula Delimiter?

Estas en el tema de Para que sirve la clausula Delimiter? en el foro de Mysql en Foros del Web. por ejemplo en este codigo que significa , para que sirve? Código PHP: DELIMITER  $$ DROP PROCEDURE  IF  EXISTS  ` test `.` UP_ANIMALSINSERT `$$ CREATE DEFINER =` ...
  #1 (permalink)  
Antiguo 28/03/2008, 19:18
Avatar de webbeginner  
Fecha de Ingreso: noviembre-2004
Mensajes: 241
Antigüedad: 19 años, 4 meses
Puntos: 2
Para que sirve la clausula Delimiter?

por ejemplo en este codigo
que significa , para que sirve?

Código PHP:
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`UP_ANIMALSINSERT`$$
CREATE DEFINER=`root`@`localhostPROCEDURE `test`.`UP_ANIMALSINSERT`(OUT _AnimalID INT,_AnimalType VARCHAR(45))
BEGIN
INSERT INTO animals
(AnimalType)
VALUES
(_AnimalType);
SET _AnimalID=LAST_INSERT_ID();
END $$

DELIMITER 

Encontre esto y me confundio un poco
Cita:
Ya he hablado de lo confuso que me resultaba cómo hacer un Stored Procedure en MySQL en comparación con MS-SQL Server que es mi habitual.

Un paso más en su comprensión, es la palabra “DELIMITER”.

Lo habitual para separar una instrucción de otra, es finalizarlas con un “;” pero un SP, al igual que un Trigger, estan formados por varias instrucciones, por lo tanto, antes de comenzar su definición, debes especificar qué caracter delimita (o separa) un SP o un Trigger del siguiente SP o Trigger.


La cuestión metalógica será, si cambias el delimitador de instrucciones por excelencia, para separar un conjunto de instrucciones agrupadas en un objeto (SP o Trigger) de otro objeto, cómo es que este delimitador sigue siendo necesario y funcional dentro de este conjunto de instrucciones? Entonces, para qué cambiarlo? y sobre todo, para qué restaurarlo después? Me parece una manera de marear la perdiz.

DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
|
DELIMITER ;
O sea que en resumen puedo usar ; y me quito de problemas y rollos raros?
saludos
__________________
************************
"La bondad es simple; la maldad, múltiple"
  #2 (permalink)  
Antiguo 03/04/2008, 14:26
 
Fecha de Ingreso: noviembre-2002
Ubicación: http://localhost/
Mensajes: 195
Antigüedad: 21 años, 4 meses
Puntos: 1
Re: Para que sirve la clausula Delimiter?

Ok, yo no se mucho de mysql, pero si se lo que es delimiter, solo que no se como explicarlo jeje pero hare el intento.

Supongamos que tienes dos instrucciones, como mysql sabe donde termina una y empieza la otra?? pues facil, donde este el ; ahi termino una y la que sigue logicamente es la otra, algo asi:

Código:
INSERT INTO tabla1 VALUES (1,'bla bla','prueba');
SELECT * FROM tabla1;
De esa forma le estas diciendo que primero corra INSERT INTO tabla1... y luego haga el SELECT * FROM..., todo claro hasta ahora? bien, si no entiendes algo me avisas.

Pero ahora imaginate que tienes un store procedure, que es como una funcion, usando ; no puedes hacerlo porque la funcion tiene muchas instrucciones por tanto necesitas muchos ; imaginate algo asi:

Código:
INSERT INTO tabla1 VALUES (1,'bla bla','prueba');
SELECT * FROM tabla1;

INSERT INTO tabla2 VALUES (2,'bla bla','prueba');
SELECT * FROM tabla2;

INSERT INTO tabla3 VALUES (3,'bla bla','prueba');
SELECT * FROM tabla3;
y supongamos que quieres meter eso en un SP (store procedure) para que solamente tengas que hacer esto:

Código:
SELECT procedure1
y al hacer eso el procedure correra todas las lineas que agregaste. Pues para que el mysql sepa de donde a donde va el procedure debes usar DELIMITER, por ejemplo

Código:
DELIMITER $$
INSERT INTO tabla1 VALUES (1,'bla bla','prueba');
SELECT * FROM tabla1;

INSERT INTO tabla2 VALUES (2,'bla bla','prueba');
SELECT * FROM tabla2;

INSERT INTO tabla3 VALUES (3,'bla bla','prueba');
$$
DELIMITER;

SELECT * FROM tabla3;
En ese caso le estas diciendo que desde donde dice $$ hasta donde dice $$ (de arriba hacia abajo) todo eso es lo que va dentro del procedure y no simplemente hasta el ;

Espero haberme explicado bien, soy pesimo explicando pero si tienes dudas me avisas.

Ahh y para entender mejor puedes buscar como crear store procedures para que veas muchos ejemplos de Delimiter

Suerte!!
__________________
http://www.ingenierosinc.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:47.