Desde ya te digo que ese código es absolutamente inservible para MySQL, por lo que ni intentes usarlo, por al menos estas cosas:
1. Un store procedure no admite más que un bloque BEGIN ... END, ya que ese bloque indica desde donde inicia y dónde termina el cuerpo completo del código del SP y ninguna otra cosa. Los demás condicionales internos son otros.
2. No existe PRINT dentro de las fucniones y/sentencias de MySQL. Si lo que quieres es una respuesta en un valor existen dos formas: a) Te lo devuelve e un una variable de entrada, para lo cual debe ser declarada en el prototipo como de salida.
b) te lo devuelve e un campo único, para lo cual se debe invocar un SELECT "Texto de salida", caso en el cual la respuesta del SP es un campo único.
3. El @ se usa en MySQL para crear variables globales, no locales. De hecho, el @ es para usar y crear variables globales dinámicas, por lo que las que lo usan no necesitan ser declaradas en el SP. Simplemente se usan.
4. Las variables de entrada no deben llevar el nombre de los campos, eso procudirá errores de almacenamiento. Tampoco deben iniciar con un "_", porque pueden confundirse con variables de sistema.
5. Las sentencias terminan con un ";". TODAS, menos los condicionales.
6. Si el SP se ingresará por consola, debe incluirse un cambio transitorio de fin de sentencia con DELIMITER para que almacene en el buffer todo el cuerpo de un solo saque y luego volver a cambiarlo por el inicial. En ese caso, el delimitador de sentencias cambiado va sólo en el END del cuerpo y luego el DELIMITER,como verás en el ejemplo.
7. SI la carga se realiza por código de programación (PHP, VB.NET u otro), se carga en un sólo string sin cambios de delimitador.
El cuerpo del SP, usando variables de salida sería mas o menos así:
Código sql:
Ver originalDELIMITER $$
CREATE PROCEDURE sp_insertarEmpleado(
IN Vusuario VARCHAR(20),
IN Vpassword VARCHAR(20),
IN Vrut VARCHAR(8),
IN Vdigito VARCHAR(1),
IN Vnombre VARCHAR(20),
IN Vape_pat VARCHAR(30),
IN Vape_mat VARCHAR(30),
IN Vtipo VARCHAR(5)
OUT salida VARCHAR(20))
AS
BEGIN
IF rut = '' OR rut IS NULL THEN
SET salida = 'error, debe ingresar RUT';
ELSE
INSERT INTO empleado VALUES(rut,digito,nombre,ape_pat,ape_mat,tip o)
INSERT INTO usuario VALUES(Vusuario,Vpassword,Vrut,Vdigito,Vestado,Vti po);
END IF
END $$
DELIMITER ;
Con devolución de valor en el SP:
Código sql:
Ver originalDELIMITER $$
CREATE PROCEDURE sp_insertarEmpleado(
IN Vusuario VARCHAR(20),
IN Vpassword VARCHAR(20),
IN Vrut VARCHAR(8),
IN Vdigito VARCHAR(1),
IN Vnombre VARCHAR(20),
IN Vape_pat VARCHAR(30),
IN Vape_mat VARCHAR(30),
IN Vtipo VARCHAR(5))
AS
BEGIN
IF rut = '' OR rut IS NULL THEN
SELECT 'Error, debe ingresar RUT';
ELSE
INSERT INTO empleado VALUES(rut,digito,nombre,ape_pat,ape_mat,tip o)
INSERT INTO usuario VALUES(Vusuario,Vpassword,Vrut,Vdigito,Vestado,Vti po);
END IF
END $$
DELIMITER ;