Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/05/2012, 21:17
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Insert Multiple en Stored Procedure

Las variables que llevan "@" son las llamadas de usuario o de sesión, y son diferentes de las locales de los SP.
Estas variables:
- Su entorno de existencia es la misma pila de memoria donde se maneja la sesión.
- No se declaran, sino que se nacen al ser invocadas por vez primera.
- Como su entorno de existencia es la sesión de la conexión en que se usan, sólo mueren cuando la conexión se termina.
- Carecen de tipo de dato. En su lugar, adoptan el tipo con el que se las inicializa (por lo que siempre se las debe incializar).
- Mientras no se las inicialice, su su valor es NULL.
- Conservan su valor mientras la conexión siga viva, por lo que cada vez que un SP las usa debe forzosamente reinicializarlas para evitar datos basura.
- Si se las crea en un SP, pueden ser accedidas luego desde otro, o desde el entorno de sesión, manteniendo su último valor siempre.

Las variables sin ese prefijo son locales de los SP, y:
- Sólo existen mientras dura el SP, es decir que su entorno es temporal y se ubica en una pila de memoria de diferente a las de usuario. Nacen y mueren con la ejecución del SP.
- Debe declararse su tipo de dato, y no pueden cambiar de tipo.
- No pueden ser invocadas por fuera del SP.

El tema es que como las sentencia preparadas se ubican en el ambiente de sesión (conexión), es imposible usar variables locales para crearlas, precisamente porque esas pertenecen a otro entorno. Por eso sólo se puede construir una sentencia preparada con variables de usuario.
¿Se entiende el problema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)