miércoles, diciembre 24, 2014
Instalar RBE en Eclipse - LUNA
En la version del ECLIPSE - LUNA no es soportada el RBE (Resouce Bundle Editor), cuando se trabaja con la versión JDK 1.6, para tener disponible este plugin disponible se debe seguir los siguientes pasos:
1.- Descargar el plugin RBE (ResourceBundleEditor_v0.8.0.zip) desde esta ubicación: http://sourceforge.net/projects/eclipse-rbe/
2.- Descomprimir y copiar a la carpeta de \eclipse\puglins
3.- Seguidamente seleccionamos Help, Install New Software.
4.- En el campo Work With seleccionar lo siguiente: The Eclipse Project Updates - http://download.eclipse.org/eclipse/updates/4.4
5.- En Name, seleccione Eclipse Test. Examples and Extras.
6.- Seleccionar Eclipse 2.0, Style Pluggin Support.
7.- Seguidamente Next hasta que culmine la instalacion perfectmente, como parte final de la instalación solictará que se reinicie el Eclipse.
8.- Luego de reiniciar el Eclipse, revisamos por Windows, Preferences y debe existir una opcion Resource Bundle Editor.
Cuando se tiene instalado la versión Jdk1.7, no es necesario realizar los pasos anteriores.
Un elemento interesante dentro de Eclipse Luna, cuando se realiza Debug, por omision desplega otra ventana, para ello deberiamos configurar en:
1.- Preferences
2.- Run/Debug
3.- Perspectives
4.- Open the associated perspective when application suspends.
5.- Seleccionar Never y Never en ambos radioButton.
martes, diciembre 16, 2014
Ejecutar un programa al iniciar el Tomcat
Para ejecutar un programa automaticamente cuando inicia el TOMCAT, se requiere un SERVLET.
Para ello se debe modificar el archivo descriptor, dentro del webapps\aplicacion\WEB-INF se debe crear un archivo web.xml, el mismo debe contener una etiqueta con lo siguiente:
Este metodo sirce para depurar registros temporales enviar correos etc etc.
A continuacion se detalle el ejemplo del servlet.
Cuando inicie el Tomcat, se desplegarà el siguiente mensaje, en su LOG.
Para ello se debe modificar el archivo descriptor, dentro del webapps\aplicacion\WEB-INF se debe crear un archivo web.xml, el mismo debe contener una etiqueta con lo siguiente:
<servlet>
<servlet-name>enviar_correos</servlet-name>
<servlet-class>com.proceso.enviarcorreos</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
|
Este metodo sirce para depurar registros temporales enviar correos etc etc.
A continuacion se detalle el ejemplo del servlet.
enviarcorreos.java
1
2
3
4
5
6
7
8
9
1
1
1
1
1
1
1
1
1
1
2
|
package com.proceso.enviarcorreos;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
/**
* @author START
*/
@SuppressWarnings("serial")
public class enviarcorreos extends HttpServlet
{
public void init() throws ServletException
{
System.out.println("----------");
System.out.println("---------- ENVIAR CORREOS EJECUTADO CON EXITO ----------");
System.out.println("----------");
}
}
|
|
----------
---------- ENVIAR CORREOS EJECUTADO CON EXITO ----------
----------
|
domingo, noviembre 23, 2014
Instalando en CENTOS7, MYSQL, WEBMIN, PHPMYADMIN, PENTAHO, JDK 32 Bits
1.- Remover todo java :
yum remove jdk
yum remove java
2.- Decargamos el paquete de JDK, procedemos a instalar
rpm -Uvg jdk-7u71-linux-i586.rpm
3.- Si reporta este problema:
/var/tmp/rpm-tmp.SkXgmf: /usr/java/jdk1.7.0_71/bin/unpack200: /lib/ld-linux.so.2 : bad ELF interpreter: No existe el fichero o el directorio
Error: unpack could not create JAR file:
Se debe a la falta de ciertas librerias para que sea compatibles, ejecutamos el siguiente comando, para proceder a instalar las librerias faltantes:
yum install glibc.i686 elfutils-libelf.i686 elfutils-lib.i686s elfutils-libelf-devel.i686 elfutils-libelf-devel-static.i686 -y --disableexcludes=all
yum install libgcc_s.so.1
4.- Eliminar el paquete de java
yum remove jdk
5.- Ejecutamos
rpm -Uvg jdk-7u71-linux-i586.rpm
6.- Revisar la version de java
java -version
Instalar WebMin.
Desde esta url: WebMin, descargar el ultimo paquete de webmin
En este caso corresponde a:
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.710-1.noarch.rpm
Ejecutamos:
Siempre con el usuario root:
1.- Descargar el paquete, el permite crear el archvio repositorio yum repo para MySQL Server.
yum install wget
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
2.- Instalar el paquete mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
3.- Instalando MySQL Server
yum install mysql-server
4.- Como start/stop/restart MySQL Server
Ahora MySQL Server esta instaldo en su sistema.
5.- Para start MySQL Service, ejecute este comando.
systemctl start mysqld
6.- Para stop MySQL Service, ejecute este comando
systemctl stop mysqld
7.- Para restart MySQL Service, ejecute este comando
systemctl restart mysqld
8.- Para revisar status of MySQL Service, ejecute este comando
systemctl status mysqld
9.- Reiniciar el servicio de MYSQL Server
systemctl restart mysqld
11.- Ejecutar este script para asignar un correcto password a MYSQL Server
mysql_secure_installation
12. Activar Mysql.
service mysqld restart
chkconfig mysqld on
13. Ingresar a mysql
mysql -u root – p
14. Digitar password
15. En Mysql creamos el usuario root
CREATE USER 'root'@'%' IDENTIFIED BY 'clave';
16. Proporcionamos todos los privilegios a este usuario.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'clave' WITH GRANT OPTION;
FLUSH PRIVILEGES;
17. Desactivar Firewall
service iptables stop
yum remove jdk
yum remove java
2.- Decargamos el paquete de JDK, procedemos a instalar
rpm -Uvg jdk-7u71-linux-i586.rpm
3.- Si reporta este problema:
/var/tmp/rpm-tmp.SkXgmf: /usr/java/jdk1.7.0_71/bin/unpack200: /lib/ld-linux.so.2 : bad ELF interpreter: No existe el fichero o el directorio
Error: unpack could not create JAR file:
Se debe a la falta de ciertas librerias para que sea compatibles, ejecutamos el siguiente comando, para proceder a instalar las librerias faltantes:
yum install glibc.i686 elfutils-libelf.i686 elfutils-lib.i686s elfutils-libelf-devel.i686 elfutils-libelf-devel-static.i686 -y --disableexcludes=all
yum install libgcc_s.so.1
4.- Eliminar el paquete de java
yum remove jdk
5.- Ejecutamos
rpm -Uvg jdk-7u71-linux-i586.rpm
6.- Revisar la version de java
java -version
Instalar WebMin.
Desde esta url: WebMin, descargar el ultimo paquete de webmin
En este caso corresponde a:
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.710-1.noarch.rpm
Ejecutamos:
rpm -U webmin-1.710-1.noarch.rpm
Instalar MySQL Server 5.6 en CentOS 7 / RHEL 7
Instalar MySQL Server 5.6 en CentOS 7 / RHEL 7Siempre con el usuario root:
1.- Descargar el paquete, el permite crear el archvio repositorio yum repo para MySQL Server.
yum install wget
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
2.- Instalar el paquete mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
3.- Instalando MySQL Server
yum install mysql-server
4.- Como start/stop/restart MySQL Server
Ahora MySQL Server esta instaldo en su sistema.
5.- Para start MySQL Service, ejecute este comando.
systemctl start mysqld
6.- Para stop MySQL Service, ejecute este comando
systemctl stop mysqld
7.- Para restart MySQL Service, ejecute este comando
systemctl restart mysqld
8.- Para revisar status of MySQL Service, ejecute este comando
systemctl status mysqld
9.- Reiniciar el servicio de MYSQL Server
systemctl restart mysqld
11.- Ejecutar este script para asignar un correcto password a MYSQL Server
mysql_secure_installation
12. Activar Mysql.
service mysqld restart
chkconfig mysqld on
13. Ingresar a mysql
mysql -u root – p
14. Digitar password
15. En Mysql creamos el usuario root
CREATE USER 'root'@'%' IDENTIFIED BY 'clave';
16. Proporcionamos todos los privilegios a este usuario.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'clave' WITH GRANT OPTION;
FLUSH PRIVILEGES;
17. Desactivar Firewall
service iptables stop
viernes, noviembre 21, 2014
CentOS: instalando Apache Portable Runtime (APR) para Tomcat en Pentaho
En Tomcat, conector HTTP es
BIO (Blocking I/O) con estabilidad, pero baja concurrenciao. Para aumentar el rendimiento de Tomcat, las formas alternativas o bien adaptar NIO (sin bloqueo de E / S - Non-Blocking I/O) o con el conector APR (Apache Portable Runtime). Sobre todo, el rendimiento de APR es en general mejor que otros al utilizar el protocolo SSL. Para más detalles sobre el rendimiento entre estos conectores puede hacer referencia a la comparación de Mike Noordermeer.
Se debe ejecutar el comando
Incluyendo la siguiente sentencia:
Incluir la siguiente linea.
Modifique o inserte con el siguiente contenido:
Prerequisiteo para instalar APR.
- Libreria APR
- Libreria APR-util
- Libreria OpenSSL
# yum install openssl-devel
Se debe ejecutar el comando
configure
o make
en los siguientes pasos, primero se debe instalar las herramientas relacionadas, las mismas que se instalan con el siguiente comando:# yum groupinstall "Development Tools"
Descargar y Instalar APR
# wget http://ftp.mirror.tw/pub/apache/apr/apr-1.4.8.tar.gz
# tar -zxvf apr-1.4.8.tar.gz
# cd apr-1.4.8
# ./configure
# make
# make install
El directorio por omisión de la instalación es: /usr/local/apr
Dedscargar e Instalar APR-util
# wget http://ftp.mirror.tw/pub/apache/apr/apr-util-1.5.2.tar.gz
# tar -zxvf apr-util-1.5.2.tar.gz
# cd apr-util-1.5.2
# ./configure --with-apr=/usr/local/apr
# make
# make install
El directorio por omisión de la instalación es: /usr/local/apr/lib
Instalar JNI Wrapper para APR usado por Tomcat (libtcnative)
# cd $CATALINA_HOME/bin
# tar -zxvf tomcat-native.tar.gz
# cd tomcat-native-1.1.27-src/jni/native
# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_25
# make
# make install
Las librerias native son instaladas en: /usr/local/apr/lib
Integrar APR con Tomcat
Los dos caminos se puede integrar APR con TOMCAT. Primero se puede adionar el siguiente parametro para que se ejecute cunado inicie el TOMCAT modificar el siguiente archivo:bin/catalina.sh
:Incluyendo la siguiente sentencia:
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
Segunda forma es adicionando una variable de ambiente llamada LD_LIBRARY_PATH
en el archivo que genera las variables de ambiente: /etc/profile
:Incluir la siguiente linea.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
Para que tenga efecto ejecutar lo siguiente:# source /etc/profile
Despues de reiniciar el servicio de Tomcat, se debe revisar el archivo de logs de mensajes llamado catalina.out
log revisar si el APR ha sido correctamente instalado.Sep 06, 2013 2:10:09 AM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.4.8.
Sep 06, 2013 2:10:09 AM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Tomcat SSLEngine Error
SEVERE: Failed to initialize the SSLEngine.
org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform
at org.apache.tomcat.jni.SSL.initialize(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.core.AprLifecycleListener.initializeSSL(AprLifecycleListener.java:259)
at org.apache.catalina.core.AprLifecycleListener.lifecycleEvent(AprLifecycleListener.java:110)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:99)
at org.apache.catalina.startup.Catalina.load(Catalina.java:640)
at org.apache.catalina.startup.Catalina.load(Catalina.java:665)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)
Si desplega este mensaje de error su siio esta sin soporte de SSL, se puede corregir este error inicializando en apahgado dentro del siguiente archivo: conf/server.xml
.Modifique o inserte con el siguiente contenido:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
domingo, noviembre 16, 2014
¿Qué es Scrum?
Scrum es un proceso en el cuál se aplican conjuntos de buenas prácticas para que podamos trabajar colaborativamente, en grupo (equipo) y así poder obtener buenos resultados. La productividad es uno de los objetivos de la metodología Scrum.
Scrum está dedicado a proyectos que tienen un entorno un poco complejo, ya que se necesita obtener buenos resultados y en menor tiempo podemos destacar que los puntos fundamentales son la innovación, la competitividad y la productividad. Está metodología también sirve para agilizar las entregas con el producto final del cliente (los tiempos de entrega), cuándo es necesario identificar y darle solución a problemas de proyectos.
En metodología de Scrum se ejecuta por bloques temporales cortos y fijos, a continuación las actividades que se llevan a cabo en Scrum:
Planificación de la iteración (reunión)
Donde se ve la selección de los requisitos (con un máximo de 4 horas) el cliente es quién expone éstos requisitos priorizados del proyecto, aquí es dónde se aclaran dudas con el cliente, etc. Posteriormente el equipo elabora la lista de tareas de la iteración para desarrollar los requisitos del cliente con el que se ha comprometido (con un máximo de 4 horas) se asignan las tareas a los miembros del equipo.
Ejecución de la iteración (standup)
Todos los días se realiza una pequeña junta dónde generalmente se le llama cómo sincronización la cuál dura 15 minutos, cada miembro menciona el status de su tarea, progresos, obstáculos unas de las preguntas básicas que debe responder cada miembro del equipo es:
¿Qué es lo que ha realizado desde la última junta de sincronización?
¿Qué hará a partir de esté momento?
¿Cuáles son los obstáculos que tengo y cuáles obstáculos creó que tendré?
El líder tiene que estar muy al pendiente de que los miembros del equipo cumplan adecuadamente con sus tareas y con lo que harán para que la productividad no se vea afectada.
La inspección y adaptación
Aquí es dónde el último día de la iteración se hace una junta de revisión de la iteración la cuál tiene el objetivo de demostrar al cliente los requisitos completos en la iteración, en forma de incremento del producto (un máximo de 4 horas). Y por último la retrospectiva dónde el equipo es quién analiza cómo ha fue su manera de trabajar y ver los problemas presentados.
- See more at: http://www.codejobs.biz/es/blog/2013/08/20/que-es-scrum#sthash.6C1jaK85.dpuf
sábado, noviembre 15, 2014
Cinco claves para instaurar en la empresa los hábitos del trabajo productivo
Los líderes empresariales deben ser transparentes, accesibles, establecer metas y plazos realistas y contribuir con hechos, no solo palabras, al objetivo de la productividad y el éxito de la organización.
Implantar una cultura de la productividad en la empresa pasa por cinco puntos cardinales para ayudar a las organizaciones a consolidar unos derechos y hábitos del trabajo productivo.
Lo primero es la actitud. A la hora de seleccionar un grupo de candidatos estos deben estar técnicamente cualificados para los puestos pero, además, deben serpersonas entusiastas. “Profesionales que aprenden del fracaso, reaccionan rápidamente bajo presión y no trasladan culpas”, ha señalado Jenna Fernandes, CEO de CareBooker.com, a The Fast Company.
Además, las reuniones de equipo deben comenzar con una agenda clara y concisa que incluya los objetivos para tomar decisiones. Después debe hacerse un seguimiento de las medidas adoptadas con plazos realistas para su ejecución.
Las metas pueden diluirse si se asignan plazos poco realistas y si se imponen con demasiada frecuenciapeticiones “urgentes”.
Asimismo, un jefe debe ser accesible, estar disponible y conceder a los empleados tiempo para hablar y escucharles. Esto permite ejecutar más rápido los proyectos y extraer del diálogo ideas nuevas que pueden mejorar la empresa, sus procesos y productos.
Además, ser transparente y mostrar a los trabajadores cómo pueden conseguir sus metas, no solo con palabras sino con hechos, ayuda a que el equipo se sienta acompañado en el objetivo de la productividad y el éxito de la empresa.
En España, el año pasado un estudio reveló que el 78% de los ejecutivos nacionales valoró el trabajo flexible como medida para mejorar la productividad (tres puntos porcentuales por encima de la media mundial), no sólo por la reducción de desplazamientos o espacio de oficina no utilizado, sino también en cuanto a la eficiencia de los profesionales.
El 80% de los encuestados destacó el gran sentido de la responsabilidad que genera el trabajo flexible y el 71% lo asoció a un aumento de la creatividad.
Otras medidas valoradas para elevar la productividad de los empleados son ofrecer formación o formas saludables de ir al puesto de trabajo (andando o en bicicleta).
Cómo hacer un Procedimiento Almacenado en MySQL sin morir en el intento
Antes de escribir un sólo comando les recomiendo ampliamente instalar el MySQL Workbench no saben el dolor de cabeza que les quitará su validador (me lo agradecerán de por vida), lo pueden descargar de aquí.
Pues bien, lo primero que explicaré será el comando DROP PROCEDURE IF EXISTS, este comando sirve para eliminar el PA si previamente existe (NOTA: este debe ser agregado antes del DELIMETER), esto es útil por ejemplo cuando estamos modificando nuestro PA y necesitamos estar actualizandolo constantemente, la sintaxis sería así:
- DROP PROCEDURE IF EXISTS myProcedure;
Bien, una vez visto eso, el siguiente comando que veremos será el DELIMETER, se refiere a escribir un delimitador para nuestras consultas SQL, este delimitador se debe específicar cuando vamos a tener varias consultas dentro de nuestro PA para decirle a MySQL que todo lo que este dentro de ese delimitador formará parte de ese PA, tu puedes elegir cualquier delimitador, pero entre los más comunes están:
- DELIMETER //
- ....
- //
O bien:
- DELIMETER $$
- ....
- $$
Después de escribir nuestro delimitador, vamos a crear nuestro PA con el comando CREATE PROCEDURE, cuya sintaxis debe ser así:
- CREATE PROCEDURE myProcedure({[PARAMS]})
- BEGIN
- ....
- END
Sin duda muchos verán que esto es similar a cuando programabas en Pascal o un lenguaje prehístorico dónde tenías que específicar los bloques de INICIO y FIN, y los parámetros aquí son opcionales.
Parámetros
Cuando creamos un nuevo PA los parámetros son opcionales y sin duda estos son de gran ayuda cuando necesitamos pasar algunos valores, la forma de específicar estos parámetros es la siguiente:
- CREATE PROCEDURE myProcedure(
- IN _language VARCHAR(2),
- IN _page INT,
- IN _max INT)
- BEGIN
- ....
- END
Cuando son muchos parámetros una buena técnica de separación y para poder ordenar y ver mejor los parámetros es dar un enter a cada uno y separarlos por comas (,). La sintaxis para estos parámetros es simplemente escribir el comando IN seguido del nombre del parámetro (recomiendo poner guiones bajos al principio de cada parámetro, leer la explicación en el siguiente párrafo) y después específicar su tipo (INT, VARCHAR, TINYINT, etc.).
Declaración de variables
Cuando creamos un PA en MySQL esté nos permite crear variables para poder asignarles algún valor e inclusive hacer ciertas validaciones, para declarar una variable se debe utilizar el comando DECLARE, una recomendación personal es que todas las variables que vayas a crear en tu PA les antepongas un guión bajo (_) y además utilices la técnica de camelCase, esto se debe a que muchas veces utilizamos variables con nombres genéricos que pudieran ser palabras reservadas de MySQL y esto nos puede causar problemas sin que nos demos cuenta en un principio y es muy complicado encontrarlos, por ejemplo si declaramos la variable "status", nos puede causar conflicto puesto que STATUS es una palabra reservada que utiliza MySQL como comando, en este caso para ver los PAs existentes con SHOW PROCEDURE STATUS, este caso lo mejor sería declararla como "_status" y nos libramos de problemas, unos ejemplos de variables serían:
- DECLARE _start INT DEFAULT 0;
- DECLARE _limit1 INT DEFAULT 0;
- DECLARE _limit2 INT DEFAULT 0;
- DECLARE _language VARCHAR(2) DEFAULT 'en';
Una vez que hemos declarado nuestras variables si necesitamos asignarle algún valor diferente en algún punto de nuestro código podemos utilizar el comando SET, de la siguiente manera:
- IF _page > 0 THEN
- SET _limit1 = _page * _max - _max;
- END IF;
Comparaciones IF... THEN ... ELSE ... END IF
Cómo en todo lenguaje hay veces que necesitamos hacer bifurcaciones a nuestros códigos y tomar caminos distintos dependiendo de la situación, pues en MySQL tenemos la posibilidad de utilizar los IFs al crear nuestros PAs, aunque sin duda se utilizan un poco de manera un poco "rudimentaria" y me recuerda a Pascal sin duda alguna, pero bueno aquí te dejo algunos bloques de IFs que puedes utilizar.
- IF _variable1 > 0 AND _variable2 == 1 THEN
- ....
- END IF;
- IF _variable1 > 0 OR _variable2 == 1 THEN
- ....
- ELSE
- ....
- END IF;
- IF _variable1 == 0 OR _variable2 == 1 THEN
- ....
- ELSE
- IF _variable1 <> 5 THEN
- ....
- END IF;
- END IF;
Selects
Los SELECT en MySQL normalmente los utilizamos para "seleccionar" ciertos campos y hacer ciertas condiciones para que nos regresen ciertos registros dentro de X tabla. Aunque en un PA sirven para lo mismo también tienen otra funcionalidad y es la de "regresar" los valores seleccionados como resultados (es decir, como que si fueran un RETURN de una función, cabe destacar que con PA no se puede utilizar RETURN).
No tan sólo sirve para "Seleccionar" registros de una db, también sirve para "Seleccionar" una variable o ciertos valores que queramos enviar "de regreso cómo resultado".
Un claro ejemplo es cuando tenemos la necesidad de hacer un "debug" a nuestros PA, la manera más fácil de hacerlo es crear un PA llamado debug, de la siguiente manera:
- DELIMITER $$
- CREATE PROCEDURE debug(msg VARCHAR(255))
- BEGIN
- SELECT CONCAT("*** ", msg) AS '*** DEBUG:';
- END $$
- DELIMITER
En el PA debug, recibimos cómo parámetro un "mensaje" o texto el cual enviaremos cuando queramos "debuggear" algún valor o variable de otro PA. La función CONCAT cómo su nombre lo indica sirve para concatenar una cadena con otra, en este caso concatenar los *** con el mensaje, y esto para que podamos identificar fácilemente el mensaje de debug que nos regresa, en otro PA, se puede utilizar simplemente mandandolo a llamar de la siguiente manera:
- DROP PROCEDURE IF EXISTS getPosts;
- DELIMITER $$
- CREATE PROCEDURE getPosts(
- IN _language VARCHAR(2),
- IN _page INT,
- IN _max INT)
- BEGIN
- DECLARE _start INT DEFAULT 0;
- DECLARE _limit1 INT DEFAULT 0;
- DECLARE _limit2 INT DEFAULT 0;
- SET _limit1 = 0;
- SET _limit2 = _max;
- CALL debug(_limit2);
- END $$
- DELIMITER ;
De esa manera podremos saber que valor tiene la variable "_limit2", y ese valor lo podremos ver en nuestro resultset cuando ejecutemos nuestro PA.
Regresando un poco al tema de los SELECT, cómo decía, en un PA podemos tener tantos SELECT cómo queramos y cada uno nos regresará un resultset, quiere decir, supongamos que usamos PHP para llamar ese PA, normalmente cuando hacemos una consulta "sencilla" en PHP nos regresa los valores en una matriz algo tipo:
- [0] => Array([0] => ["Campo"] => valor);
Pero cuando mandamos 2 ResultSets, en este caso el del Debug y el de los valores, recibiremos algo así (espero se entienda la idea):
- [0] => Array([0] => ["**Debug:"] => 'EL MENSAJE DEL DEBUG'); // Debug resultset
- [1] => Array([0] => ["Campo"] => valor); // Valores resultset
Cómo último consejo les digo que la clausula LIMIT solamente acepta valores de tipo INT divididos en 2 variables, por eso ven las variables _limit1 y _limit2, en un principio yo intentaba hacerlo concatenando los valores en un string tipo "0, 12", pero jamás resulto, es un buen tip que les puede servir, y bueno aquí les dejo el PA que hice ayer y espero les pueda servir un poco cómo ejemplo, es para obtener los posts de un blog, los veo en la siguiente publicación, saludos. No olviden escribir sus dudas en los comentarios.
- DROP PROCEDURE IF EXISTS getPostsByCategory;
- DELIMITER $$
- CREATE PROCEDURE getPostsByCategory(
- IN _category VARCHAR(100),
- IN _language VARCHAR(2),
- IN _page INT,
- IN _max INT)
- BEGIN
- DECLARE _start INT DEFAULT 0;
- DECLARE _limit1 INT DEFAULT 0;
- DECLARE _limit2 INT DEFAULT 0;
- SET _limit1 = 0;
- SET _limit2 = _max;
- IF _page > 0 THEN
- SET _limit1 = _page * _max - _max;
- END IF;
- SELECT COUNT(1) AS total
- FROM (
- SELECT blog_posts.id FROM blog_posts
- LEFT JOIN blog_re_categories2posts ON (blog_re_categories2posts.postId = blog_posts.id)
- LEFT JOIN blog_categories ON (blog_categories.id = blog_re_categories2posts.categoryId)
- WHERE blog_categories.slug = _category
- GROUP BY blog_posts.id
- ) AS Result;
- SELECT title, blog_posts.slug, excerpt, content, author, mainImage, createdAt, day, month, year, blog_posts.language, GROUP_CONCAT(blog_categories.category SEPARATOR ', ') AS categories
- FROM blog_posts
- LEFT JOIN blog_re_categories2posts ON (blog_re_categories2posts.postId = blog_posts.id)
- LEFT JOIN blog_categories ON (blog_categories.id = blog_re_categories2posts.categoryId)
- WHERE blog_categories.slug = _category
- AND blog_posts.language = _language
- AND blog_categories.language = _language
- AND blog_posts.situation = 'Published'
- GROUP BY blog_posts.id
- ORDER BY blog_posts.id DESC
- LIMIT _limit1, _limit2;
- END $$
- DELIMITER ;
Para mandar a llamar los PA simplemente se utiliza el comando CALL en nuestra query.
- See more at: http://www.codejobs.biz/es/blog/2014/07/09/como-hacer-un-procedimiento-almacenado-en-mysql-sin-morir-en-el-intento#sthash.6X4pBcKv.eSPatRJj.dpuf
- CALL myProcedure(1, 2, 'Valor string', 3);
- // En PHP sería algo tipo:
- $query = mysqli_query("CALL myProcedure(1, 2, 'Valor string', 3)");
Suscribirse a:
Entradas (Atom)