Entradas de la categoría: ‘Programación’

Delimiter en MySQL

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 ;

July 28th, 2007 by albinworld

Consumo excesivo de recursos en LunarPages

En Pascuas, estaba de vacaciones por Noruega, a miles de kilometros de mi ordenador, y de repente, una mañana que aproveché para mirar el correo en un ordenador prestado mientras su propietaria se vestía, me encuentro un mail de LunarPages dónde me decían que mi cuenta estaba utilizando demasiados recursos, y que la movían preventivamente a un servidor a parte, y me daban siete (7) días para solucionarlo.

Casualmente caducaban al día siguiente de volver a casa, así que no tenía tiempo de hacer mucho, miré estadísticas en busca de alguna página que se hubiera estado recargando, miré los error_log que guarda PHP en el servidor, miré los log de apache, medité sobre los últimos cambios realizados, y no encontré ni imaginé causa posible alguna. Así que les respondí solicitando que lo dejaran como estaba, admitiendo no haber hecho ningún cambio, y argumentando que no encontraba razón por la que hubiera sucedido, y todos seguimos como amigos.

Ahora, varios meses después, me vuelven a enviar otro mail indicándome que mi cuenta ha consumido más recursos de los adecuados para un hosting compartido. El tema, es que solo saben la cuenta en la cual ha sucedido, no saben qué script, ni si quiera qué dominio. Así que ellos te ofrecen 10 Add On Domains, y te ofrecen ilimitados subdominios, pero cuando algo casca, búscate la vida para tener una mínima idea de dónde puede estar el problema.

No es que esperase unas gráficas, pero, la información que te dan son tres líneas, bien cutres, que, a saber (por tirar balones fuera) si no será algo puntual durante un segundo, un segundo cada tres meses, y se estan enojando por nada.

¿Qué se supone que debo hacer? ¿Qué haríais vosotros?

Voy a llevarme algunos dominios a otra cuenta, no porque piense que es la solución, sino para prevenir que, si estos incidentes son por causa de alguno de mis proyectos personales, no afecten a mis clientes personales.

July 28th, 2007 by albinworld

¿El algoritmo del page rank o la fórmula de la cocacola?

Se popularizó el mito de que la fórmula de la cocacola solo la sabían dos personas, que nunca viajaban juntas, etc.

En realidad, no sé hasta qué punto no se puede hacer “ingeniería inversa” de una sustancia. O sobornar a empleados de la fábrica para que te cuenten su colaboración en el proceso de fabricación.

“Yo no sé qué es lo que llega por el tubo 213 pero yo le añado cosilitato cosafolico de cosaluro” Ingeniero X a cargo de la salida por el tubo 214.

Pero ¿Cuanta gente conoce el algoritmo que usa google para ordenar los resultados (ya no solo el famoso pagerank)?

Muchas personas lo tratan como una caja negra, y tratan de averiguar sus leyes internas. Muchos ingenieros participarán en alguna medida a programar parte de él, pero ¿cuantas personas tienen una idea generalizada, un white paper, unas especificaciones, de cómo debe funcionar el sistema completo? a caso Matt Cutts o ni si quiera él?

June 20th, 2007 by albinworld

Guardar el alma en un tarro de cristal…

… y poder darle cuerpo después, durante un instante, para volver a interactuar de nuevo con ella.

El asunto, hablando en serio, es que quería jubilar a mi portatil, que últimamente solo utilizaba para bajar el correo POP con Eudora (ahora he migrado a Thunderbird) y como respaldo porque allí tengo los proyectos en que he estado trabajando últimamente.

Entonces encontré que VMWare tiene un producto llamado VMWare Converter que permite clonar una máquina física en una máquina virtual, de manera que guardando sus 40 Gb en algún disco externo USB (total, por 100 euros los tenemos de 500 Gb) podría guardar “su alma” por si algún día quisiera volver a usarlo para algún propósito (no solo recuperar información que se encuentra en CDs de Backup sino revisar la configuración de alguno de sus programas, o algún programa que por una vez que lo vas a usar no quieres tener que instalarlo de nuevo).

Me ha parecido una idea, y un producto, mágnifico … te permite clonar la propia máquina, o una máquina en red, o importar desde archivos creados con el GHost, …

Al principio no me funcionaba, y es que, para configurar la importación, necesitas que en la carpeta temporal del sistema quepan tantos gigas como ocupará la máquina virtual (WTF! cómo va a caber la máquina clon dentro de la máquina a clonar?) con lo cual tienes que ir a Variables de Entorno y cambiar las variables TEMP y TMP para que apunten a una carpeta externa (por red, o un USB). Además he encontrado la solución por casualidad, pues el error que muestra (”This application has requested the Runtime to terminate it in an unusual way”) no es precisamente descriptivo y me hizo pensar que simplemente “se había instalado mal y no funcionaría en la vida”.

Posteriormente sigue sin funcionar, y he probado cuatro veces, con un coste de más de dos horas cada una. Cuando está al 97% del proceso “Preparing target virtual machine” devuelve el siguiente error “Unknown error returned by VMware Converter Agent” que como de costumbre no es muy significativo. De las cuatro veces, dos de ellas ha ido acompañado de una ventana que decía que el tamaño de mi registro no era suficientemente grande (no textual) pero lo he aumentado según indican aquí, y ha vuelto a fallar. No sé, supongo que simplemente no estoy de racha.

June 17th, 2007 by albinworld

Excelente artículo de OOP en Javascript

Solo llevo leído la mitad, pero me parece reseñable este artículo sobre OOP con Javascript.

Coincido con el autor en que muchos programadores llevamos mucho tiempo con Javascript, hemos hecho cien virgerías, y aunque conocemos algunas de sus peculiaridades, se nos escapan otras, o no las hemos aprendido por asimilación. En todo caso, es agradable leer cómo va explicando y razonando poco a poco los entresijos.

May 29th, 2007 by albinworld

Applet - WebCam

Va de retro! En pleno S. XXI (aún vamos por ese, no?) ponerse a hacer un Applet, pero bueno, me lo encargaron, y ya que está hecho, lo he puesto en una web.

Applet para WebCam

El primer problema a resolver fue detectar si la imagen estaba completa. Puesto que la imagen se sube por FTP, puede suceder que el applet la solicite cuando el fichero está a medias. Los métodos oficiales para cargar imágenes no te avisan de esta situación, todos funcionan “demasiado bien”. La solución ha sido comprobar los dos últimos bytes del fichero, que deben tener una marca propia del JPG. Después de consultar con colegas no se nos ocurrió nada mejor.

Después he implementado un par de virguerías, como rotar la imágen, sobre poner la fecha (estas dos era parte de las especificaciones), pasarla a escala de grises, cambiarle el brillo, poner una marca de agua … casi todo ha sido facil o copiar y pegar código que he encontrado por ahí, pero de todos modos, ha estado bien “lo aprendido”.

En búsca y captura de un libro de O’Relly “Java 2D Graphics” en PDF.

May 28th, 2007 by albinworld

Consideraciones sobre Amazon S3

A raíz del post de Juanjo sobre Escalabilidad de aplicaciones (web) he descubierto el servicio Amazon S3 de hosting a gran escala, y me ha parecido muy curioso.

Ellos, y no digo que no sea justo, te cobran por caudal, tanto de subida como de bajada, y te cobran por tiempo de proceso, por cada petición que haces (vale, es una miseria, pero lo cobran). Pero una vez recuperas el fichero, y lo tienes que enviar a tu usuario, también estás gastando tu propio caudal, que habitualmente cuesta dinero.

Además, precisamente ayer comentábamos sobre porqué no almacenar imágenes en base de datos (o en este caso, en un servidor a parte) y el propio Juanjo argumentaba que eso inutilizaría las técnicas de caché, o habría que reimplementarlas.

Por otro lado, no controlo mucho de WebServices pero, si la comunicación se realiza enviando XML mediante HTTP, para transferir -por ejemplo- un fichero de 100 Mb ¿No hace falta tenerlo en memoria?

May 23rd, 2007 by albinworld

Almacenar imágenes en base de datos ¿Porqué no?

Se me ocurría esta mañana mientras iba en el autobus, sin razón aparente.

Guardando las imágenes necesarias para la web en el disco, has de estar pendiente de borrar la anterior cuando pones una nueva, de borrar las que están en uso cuando se borra un registro, de copiarlas del entorno de producción al de publicación cuando se publica la base de datos, etc.

Todo por evitar que cuando se solicite una imagen, sea necesario hacer una consulta más a la base de datos … porque espacio, lo que se dice espacio, no creo que ocupen mucho más en un sitio que en otro, salvo que afecte exageradamente al registro de transacciones y movidas varias, pero todo esto depende del motor de base de datos que uses.

En HSQLDB ocuparían el doble exacto, porque cada byte se almacena en formato hexadecimal (texto, osea dos bytes), pero en otros motores …

¿Qué opinais?

May 22nd, 2007 by albinworld

Contraseña o Password de Administrador o Root o SuperUsuario en Ubuntu

Resulta que en su afan por ser tan como Windows, esta distro ni te pregunta por los paquetes a instalar, ni te pregunta por la password del usuario root, ni … vamos, que te pregunta la zona horaria y el idioma por lo mismo, por parecerse a Windows.

¿Cómo ejercer como super usuario? Con “sudo”, que por lo visto conoce la clave aleatoria que se ha generado para root.

Truco del almendruco, utilizar sudo para cambiar la password del root, y así poder hacer login como root a la antigüa usanza.

sudo passwd

Perdón, dije login? No se puede hacer login con root, no sea que el usuario modelo windows lo use como hábito, pero al menos cuando te salte la pregunta de la contraseña para poder hacer cambios en la configuración, sabrás qué contestar.

May 21st, 2007 by albinworld

CompuGlobalHiperMegaNet, la empresa de Homer

He encontrado el blog de un tipo que parece que controla bastante de programación. Lo comparto con vosotros.

May 17th, 2007 by albinworld

Probando Matisse, el GUI Builder de Netbeans

Pues, a falta de una idea mejor sobre cómo mejorar mis UI, y recordando que uno de los motivos que me impulsó a probar NetBeans había sido un vídeo de cómo funcionaba su GUI, esta mañana he buscado dicho tutorial, y he dado una oportunidad al editor de interfaces.

Hace un buen trabajo, aunque parte del buen trabajo lo hace el Layout de Swing que utiliza, pero no le resta mérito a lo cómodo que te hace construir un interface básico. Tiene lo propio, el editor de propiedades que se hace un poco raro en ocasiones, y el generador de métodos para gestionar eventos.

Sus manías y las mías.

Es un generador de código bastante limpio, en el constructor de tu clase introduce una llamada a su función para inicializar componentes, al viejo estilo del JBuilder 4, y pone sus declaraciones de variables al final de la página, todo muy limpio. Además, bloque las líneas que ha escrito él para que no puedas modificarlas, y ahí es dónde tenemos nuestro primer encontronazo.

A pesar de todo lo limpio que es, y probablemente me acostumbre a trabajar así, mi primer instinto ha sido hacer AppUI (con Matisse) y App extends AppUI (con mis manitas) pretendiendo que Matisse manejase sus cosas en su clase, y yo manejase las mías en mi clase (gestión de eventos, rellenado de controles, etc). ¿Qué sucede?  Pues que Matisse declara sus objetos como private, y como bloque las líneas para que no puedas modificarlas … claro! a lo mejor es lo correcto, filosóficamente, y no es que no hayan alternativas, podría hacerme métodos get para acceder a esos objetos (JLabel, JList, etc), o podría implementar la lógica de lo que quiero hacer con ellos dentro de esa clase, pero precisamente lo que me gustaría evitar es que ambos toquemos el mismo fichero, aunque insisto, es muy limpio y respetuoso, pero no entiendo porqué no me deja modificar el acceso a esas variables. Hombre, que en el fondo es mi código, dejaré de poder hacer con él lo que quiera!?.
En todo caso, muy recomendable. Aunque de todos modos, habrá que seguir intentando aprender a manejarse bien con los Layout (y demás conceptos relacionados) puesto que aún quedan muchos recodos dónde pueden ser interesantes, por ejemplo si implementas tu propio XxxCellRenderer.

April 29th, 2007 by albinworld

UI en Java

Segunda tarde-panzá de programar en Java.

Sigo pensando que Netbeans es un poco desquiciante en algunos aspectos, pero no lo suficiente como para animarme a piratear el IntelliJ :oP

Lo que he estado haciendo es retomar mi proyecto JTS (Java Transfer System) y dotarlo de interface de usuario.

En parte porque me apetecía programar en Java. En parte porque viendo las estadísticas, resulta que se han interesado bastantes personas.

No creo que me llame Sun para integrarlo dentro de Netbeans, y menos con los comentarios que hago sobre su IDE (jeje - perdón), pero si lo suficiente como para reavivar mi fé en que es útil. Aunque en el fondo nadie me ha escrito para decirme si lo usa o no lo usa o pedirme que lo mejore …

El tema es que … ¡soy patético haciendo UIs! … si alguien me tira un cable, o un libro de canto a la cabeza, pues se lo agradeceremos todos.

April 27th, 2007 by albinworld

Indefenso ante tu entorno

Se trata de un artículo bastante antíguo, cuando lo leí mi me parecío muy acertado, y lo tengo presente en muchas ocasiones.

Principio de indefensión adquirida, cuando tratas de trabajar pero tu entorno está en tu contra.

Que corra el cava! We have new computers in the office. Ya no tendré que esperar 20 segundos para abrir una pestaña en Firefox.

April 24th, 2007 by albinworld

NetBeans 5.5 vs IntelliJ 4

Hablo de IntelliJ 4 porque es el último que tuve instalado. Era, es, y supongo que será, mi entorno de desarrollo favorito para aplicaciones de escritorio en Java. Hago este matiz, porque las pocas veces que me he propuesto dedicar unos minutos a J2EE con IntelliJ me ha sido imposible aclararme para configurar su Tomkat y hacer algo mediánamente decente.

Bueno, al tema … el caso es que por miedo a meterme basura por querer crackear el Intelli J 6 (qué razón más ruín) hacía pereza de instalármelo, y he acabado probando el NetBeans 5.5

A diferencia de versiones anteriores, que recuerdo vágamente porque salí corriendo de ellas (como con eclipse), parece que esta vez es bastante más usable, a nivel de crear un nuevo proyecto y de aclararte con todas las ventanitas que tienes por ahí flotando.

De hecho, esta tarde me he pasado un montón de horas programando y me ha resultado cómodo, pero le veo tres problemitas en comparación con IntelliJ (sin orden especial):

- En IntelliJ cuando estabas en modo debug y recompilabas, si no habías hecho ningún cambio traumático, no tenías que reiniciar la aplicación, digamos que se recargaba el programa en caliente, y la siguiente vez que pasaba por un método, lo hacía ya con el nuevo código compilado.

- IntelliJ es mucho más rápido y mucho más inteligente a la hora de checkear tu sintaxis, de proponerte cambios, de recordarte los parámetros de los constructores o métodos, y los listados de dichos métodos y propiedades. Con NetBeans han habido momentos (la aplicación es relativamente chiquitina) que me valía la pena pulsar F11 para compilar antes que esperar a que se gestionase el evento “Albin paró de escribir, comprueba qué escribió”.

- IntelliJ tiene un abanico de opciones a la hora de refactorizar mucho más completo.

April 22nd, 2007 by albinworld

Mi primera búsqueda con Opensearch

No sé cómo me enteré del proyecto Opensearch. En su web se define como “un formato de descripción de motores de búsqueda de modo que puedan ser usados por aplicaciones cliente de búsqueda”.

En mis propias palabras, el proyecto pretende que tengas un script que reciba peticiones HTTP con la búsqueda a realizar en tu website, y que el script genere ficheros XML (RSS, Atom) con los resultados de la búsqueda, según tu criterio de similitud y ordenación.

Como me pareció facil de implementar, y como era novedoso, pues lo hice. Pero como me mostraba escéptico, incluí que el script me enviase un mail cada vez que se ejecutase (es más desatendido que estar atento a las estadísticas o a los logs). Pues ¡iuju! ha sucedido por primera vez, casi dos meses después -jajaja-.

April 22nd, 2007 by albinworld

DVDRip

Ui rediez!

Mietras la inmensidad de los usuarios piensan que, por dedicarte a la informática, tienes que saberlo todo, después de un lustro disfrutando de la descarga de DivX no ha sido hasta este finde cuando me he enfrentado por primera vez al reto de rippear un DVD.

Me ha llamado la atención que después de todo el tiempo que lleva la humanidad haciendolo, aún sea un suplicio lidiar con tantos programas que solo hacen parte del trabajo para finalmente tener el resultado. Estamos demasiado bien acostumbrados, imagino, a procesadores de texto que también imprimen.

Primero lo intenté con programas que prometían preocuparse de todo por mí, como RipitAll.

Luego con Gordian Knot, que pone a tu disposición todos los programas que necesitas para todos los pasos.

Y finalmente, el que mejor resultado me ha dado, el Auto Gordian Knot.

(esto lo escribí hace un semestre, no sé porqué se quedó como borrador, supongo que esperé a tener más impresiones que comentar, pero al final realmente me quedé con ese programa, y no necesité más).

April 21st, 2007 by albinworld

Microsoft Expression Web

Me lo instalé hace tiempo, había visto un vídeo y me pareció que tenía buena pinta.

Tiene buena pinta, desde el punto de vista que está mejor orientado que el DreamWeaver a crear un código correcto, aunque por supuesto, tienes que saber lo que haces, qué es CSS y cómo organizarte. Y también desde el punto de vista que permite una facil integración de componentes realizados en .Net.

La parte ilusa de cierto vídeo es que no explicaba de dónde surgían esos componentes. El vídeo decía, cualquier diseñador que sepa un poco de maquetación en XHTML puede montar un website en una patada. Pero no explica de dónde salen esos componentes ni cómo se han introducido los datos que muestran esos componentes.

Y digo yo, quizás es cierto, quizás se podría crear un grupo de componentes altamente adaptables de las secciones más comunes, y luego las no tan comunes, que puede necesitar una web. Y licenciarlas para que cualquiera -con una excepción- las use.

Ya puestos, y sería el siguiente paso lógico, hacer también el CMS. Uf! sé que no es muy original la idea de un CMS más en el mercado, pero el planteamiento sí lo es.
Se trata de hacer, por ejemplo, un modulo llamado Noticias Krypton, que permite una serie de campos con una lógica, y un modulo llamado Noticias Kwan, que permite otro planteamiento. Si Krypton permite que la noticia tenga estado de archivo y el cliente del programador no quiere archivo de noticias, se puedría configurar, no hace falta hacer tantos modulos como posibles especificaciones hayan, pero como pueden haber planteamientos claramente incompatibles, pues tampoco hay que cerrarse a la idea de que exista un único modulo de noticias. Lo mismo para galerías de imágenes, etc.

Y por el lado web, pues cada modulo de CMS tendría su módulo hermano, que con plantillas XSLT (de ahí el post del otro día) generaría el interface.

Esto no quita todo el trabajo, como prometen muchos sistemas, pero si la parte más común. Y permite un alto grado de separación lógica-presentación.

March 30th, 2007 by albinworld

El desuso de XSLT y los gestores de contenidos.

Recuerdo haber investigado el uso de XSLT hace una eternidad, en el año 2000 día arriba día abajo, lo utilicé dos veces, y no lo he vuelto a utilizar hasta hace poco en un par de ocasiones más.

Lo utilicé para un proyecto en la empresa dónde trabajo, es una inmobiliaria que muestra información turística de las zonas dónde tiene sus promociones, y puesto que la comparte con otros websites, nos vino bien.

Lo utilicé para mi página personal porque quería tener los contenidos separados de la presentación, y después renderizarlos como XHTML o como PDF utilizando Batik. Fue un desastre por cuestiones de charsets, abandoné la página en 2002 arto de pelearme con ello, y luego nunca he tenido tiempo de retomarla.

Más actualmente lo he utilizado con Google Mini. El sistema genera un XML con los resultados (entre otra información), y mediante XSLT compones la página que el usuario acaba visualizando finalmente.

A parte de que sea un joven cebolleta, a quién le encanta contar sus historietas. ¿A qué viene esto?

Pues tengo un inventillo en mente, que después de usarlo para mi propio propósito con el aspecto que me parezca adecuado, quizás quiera liberar, y pensaba en cómo podría habilitar que futuros implementadores tengan absoluta libertad para cambiarle el aspecto, pero mi gestión de los contenidos les siga resultando útil. Una posible solución sería el uso de etiquetas dentro del XHTML al estilo TextPattern, pero no me acaba de convencer, porque lo veo tedioso de parsear por mi parte. Por otro lado, me parece que casi nadie sabe / usa / se acalara con XSLT. Pero bueno, no me importa hacerlo para listos, además, la mayoría se conformarían con cambiar colores en el CSS, sobrescribir unas imágenes, y poco más, supongo.

March 26th, 2007 by albinworld

MySQL - Exportando procedimientos almacenados al servidor de hospedaje

El asunto es que, cuando utilizas MySQLDump para generar un fichero .sql con intención de subirlo al servidor, MySQLDump no exporta la creación de funciones y procedimientos almacenados.

He accedido al CPanel y he autorizado conexiones al Servidor de MySQL desde mi IP. Luego he arrancado el MySQLQueryBrowser abriendo una conexión local, he pulsado sobre mi Procedimiento Almacenado, he pulsado F2, he sombreado, he copiado … he abierto otra conexión pero esta vez hacia el servidor de hospedaje, he seleccionado la base de datos, he pulsado para crear un nuevo procedimiento almacenado, y he pegado.

Consideraciones, acordarse de que seguramente la base de datos en el servidor de hospedaje tiene otro nombre diferente, suelen tener como prefijo tu nombre de usuario en ese sistema. Y acordarse de quitar el “definer” de la declaración porque lógicmente ese usuario tampoco existe allí. Yo he preferido quitarlo, y que el servicio le asigne el usuario que considere oportuno.

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_getExpresion`(prmYearWeek varchar(6))

phpMyAdmin es super completo, super estable, … pero es vía web, es como más incómodo, y ahora que tenemos el MySQLQueryBrowser -libre y ligero, no como el front-end de Toad- pues a mi me resulta preferible, antes incluso conectaba directamente con la consola de mysql pero claro, una cosa es escribir consultas sueltas de DDL y otra es escribirse un procedimiento con la consola.

March 25th, 2007 by albinworld

MySQL - Creando procedimientos almacenados

Mi segundo intento por usar las caracteristicas que aporta MysQL 5 sobre la versión 4. En esta ocasión el objetivo era crear un procedimiento almacenado, cual ha sido mi sorpresa, cuando he leido que ¡no puede devolver una tabla! de hecho no puede devolver nada, solo las funciones pueden … curioso, pero bueno, aún puede hacer algo por mí, marcar el registro que me interesa.

Bueno, esta vez ha sido menos doloroso, y hasta he conseguido usar un IF. Pero no es facil encontrar ejemplos por la red, tampoco digo que sea dificil, quien quiera que me entienda.

DROP PROCEDURE IF EXISTS `degramm`.`sp_getExpresion` $$
CREATE PROCEDURE `degramm`.`sp_getExpresion` (prmYearWeek varchar(6))
BEGIN

DECLARE nMax   tinyint;
DECLARE id     int;

SELECT nApariciones INTO nMax FROM t_expresiones WHERE sYearWeek = prmYearWeek;

IF @nMax = null THEN
SELECT idExpresion INTO id FROM t_expresiones WHERE nApariciones<@nMax LIMIT 0, 1;
UPDATE t_expresiones SET sYearWeek = prmYearWeek WHERE idExpresion = @id;
END IF;

SELECT * FROM t_expresiones WHERE sYearWeek = prmYearWeek;

END $$

Curiosamente, esta vez no he necesitado usar la arroba en el “SELECT col INTO var”.

Un END IF con un punto y coma se me hace raro. Por no hablar de cómo se ejecuta

CALL sp_getExpresion('2007-12')

La utildiad de los parámetros de tipo OUT será si llamas de un procedimiento a otro, sino que me cuente alguien cómo recuperas una variable si en PHP llamas al procedimiento así:

mysql_query("CALL sp_ConParametroTipoOUT '".$EsteValorNoPuedeSerVariadoEnLaVida."'", $dbLink)

March 20th, 2007 by albinworld