No has entendido en detalle.
En esencia es un script, pero se crea con una sentencia específica y con un conjunto específico de instrucciones:
Código:
CREATE PROCEDURE NombreProc(IN Param1 INT,
INOUT param2 CHAR(8), OUT param3 DATETIME)
BEGINS
/*Cuerpo del procedure */
...sentencias ...
END;
En este caso te estoy mostrando un SP que tiene tres parámetros (puede no tener ninguno), uno entero de entrada, uno char de entrada-salida, y uno datetime de salida.
El cuerpo del procedure se encuentra entre el BEGIN y el END.
Como el SP
pertenece, como te dije,
a UNA BASE DE DATOS, queda cargado en ella
SIEMPRE, hasta que se lo borre.
SIEMPRE está accesible (en tanto el usuario tenga permisos de EXECUTE).
No se guarda aparte JAMÁS.
Si lo vas a programar directamente en consola hay algunas reglas que puedes leer en:
Capítulo 19. Procedimientos almacenados y funciones.