--Declaracion de la variable que nos permitira medir el tiempo DECLARE @TiempoInicial DATETIME SET @TiempoInicial = GETDATE() -- ------------------------------- SETENCIAS ------------------------------- SELECT * FROM Persona WHERE DATEDIFF(day, FechaRegistro, DATEADD(DAY,-15,GETDATE())) <= 0 -- ------------------------------- SETENCIAS ------------------------------- -- Realizar la diferencia entre el tiempo inicial y final de la ejecución de las sentencias PRINT 'Operacion completada en: ' + RTRIM(CAST(DATEDIFF(ms,@TiempoInicial, GETDATE()) AS VARCHAR(10))) + ' milisegundos'
Bienvenido, en el presente blog encontraras diversos articulos, manuales y direcciones de apoyo para los siguientes lenguajes: XML, Java, .NET (C# y aspx), JavaScript, SQL y C++
viernes, 10 de noviembre de 2006
SQL - Medir el tiempo de ejecución de sentencias sql
--Declaracion de la variable que nos permitira medir el tiempo DECLARE @TiempoInicial DATETIME SET @TiempoInicial = GETDATE() -- ------------------------------- SETENCIAS ------------------------------- SELECT * FROM Persona WHERE DATEDIFF(day, FechaRegistro, DATEADD(DAY,-15,GETDATE())) <= 0 -- ------------------------------- SETENCIAS ------------------------------- -- Realizar la diferencia entre el tiempo inicial y final de la ejecución de las sentencias PRINT 'Operacion completada en: ' + RTRIM(CAST(DATEDIFF(ms,@TiempoInicial, GETDATE()) AS VARCHAR(10))) + ' milisegundos'
martes, 7 de noviembre de 2006
SQL - Crear un procedimiento almacenado
- Procedimento sin parametros.
- Procedimiento con parámetros de entrada.
- Procedimiento con parámetros de entrada y de salida.
Nota: Los procedimientos almacenados definidos por el usuario son creados en la base de datos actual. |
Procedimiento sin parámetros. |
/* -------------------------------------------------------------------------------- Autor: Mario Alberto Sanchez Gamboa Fecha: Descripcion: Procedimiento que realiza la suma de dos numeros y regresa el resultado mediante el uso de la sentencia SELECT. **Emplea declaracion de variables. **Asigacion de valores a variables. **Uso de ISNULL.- Remplaza el nulo por el valor especificado. **Uso de CAST.- Convierte explicitamente una expresion de un tipo de dato a otro. **Concatenacion de cadenas. -------------------------------------------------------------------------------- */ CREATE PROCEDURE spSumaSinParametros AS --Declaracion de variables DECLARE @Numero1 FLOAT, @Numero2 FLOAT, @Resultado FLOAT, @Operacion NVARCHAR(25) --Asignacion de valores iniciales SET @Numero1 = 5.55 SET @Numero2 = 15 --Operacion. --Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables. SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0) SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR) --Realizar un select con el resultado de la operacion. SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Resultado AS Resultado, @Operacion AS Operacion GO
Para ejecutar el procedimiento almacenado empleamos la siguiente sentencia:
EXECUTE spSumaSinParametros Resultado: Numero1 Numero2 Resultado Operacion -------------------- ---------- --------------------- -------------------- 5.5499999999999998 15.0 20.550000000000001 5.55 + 15 = 20.55 (1 row(s) affected) |
Procedimiento con parámetros de entrada. |
/* -------------------------------------------------------------------------------- Autor: Mario Alberto Sanchez Gamboa Fecha: Descripcion: Procedimiento que realiza la suma de dos numeros los cuales recibe mediante parametros de entrada y regresa el resultado mediante el uso de la sentencia SELECT. **Emplea declaracion de variables. **Asigacion de valores a variables. **Uso de ISNULL.- Remplaza el nulo por el valor especificado. **Uso de CAST.- Convierte explicitamente una expresion de un tipo de dato a otro. **Concatenacion de cadenas. -------------------------------------------------------------------------------- */ CREATE PROCEDURE spSumaConParametros @Numero1 FLOAT, @Numero2 FLOAT AS --Declaracion de variables DECLARE @Resultado FLOAT, @Operacion NVARCHAR(25) --Operacion. --Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables. SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0) SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR) --Realizar un select con el resultado de la operacion. SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Resultado AS Resultado, @Operacion AS Operacion GO
Para ejecutar el procedimiento almacenado empleamos la siguiente sentencia:
EXECUTE spSumaConParametros 5.55, 15 Resultado: Numero1 Numero2 Resultado Operacion -------------------- ---------- --------------------- -------------------- 5.5499999999999998 15.0 20.550000000000001 5.55 + 15 = 20.55 (1 row(s) affected) |
Procedimiento con parámetros de entrada y salida. |
/* -------------------------------------------------------------------------------- Autor: Mario Alberto Sanchez Gamboa Fecha: Descripcion: Procedimiento que realiza la suma de dos numeros y regresa el resultado mediante el uso un parametro de salida y una sentencia SELECT. El valor son recibidos con parametros de entrada, y el resultado es regresado mediante un parametro de salida, asi como de una sentencia SELECT. **Emplea declaracion de variables. **Asigacion de valores a variables. **Uso de ISNULL.- Remplaza el nulo por el valor especificado. **Uso de CAST.- Convierte explicitamente una expresion de un tipo de dato a otro. **Concatenacion de cadenas. -------------------------------------------------------------------------------- */ CREATE PROCEDURE spSumaConParametroDeSalida @Numero1 FLOAT, @Numero2 FLOAT, @Resultado FLOAT OUTPUT AS --Declaracion de variables DECLARE @Operacion NVARCHAR(25) --Operacion. --Nota: Se puede hacer uso de SELECT y/o SET para la asignacion de valores a las variables. SELECT @Resultado = ISNULL(@Numero1, 0) + ISNULL(@Numero2, 0) SET @Operacion = CAST(@Numero1 AS VARCHAR) + ' + ' + CAST(@Numero2 AS VARCHAR) + ' = ' + CAST(@Resultado AS VARCHAR) --Realizar un select con el resultado de la operacion. SELECT @Numero1 AS Numero1, @Numero2 AS Numero2, @Operacion AS Operacion GO
Para ejecutar el procedimiento almacenado empleamos la siguiente sentencia:
DECLARE @ParamResultado FLOAT DECLARE @EjecucionParametro INT EXECUTE @EjecucionParametro = spSumaConParametroDeSalida 5.55, 15, @ParamResultado OUTPUT SELECT @ParamResultado AS Resultado, @EjecucionParametro AS EjecucionParametro Resultado: Numero1 Numero2 Resultado Operacion -------------------- ---------- --------------------- -------------------- 5.5499999999999998 15.0 20.550000000000001 5.55 + 15 = 20.55 (1 row(s) affected) Resultado EjecucionParametro --------------------- -------------------- 20.550000000000001 0 (1 row(s) affected) |
Si se desea comprobar la existencia de un procediento se puede hacer uso de las siguientes sentencias. |
--Verificamos si el procedimiento que vamos a crear existe en la base de datos, --en caso de que exista se procede a eliminar dicho procedimiento. IF EXISTS (SELECT name FROM sysobjects WHERE name = 'spSumaSinParametros' AND type = 'P') DROP PROCEDURE spSumaSinParametros GO |
En este ejemplo verificamos si ya existe el procedimiento spSumaSinParametros, en caso de que exista se procede a eliminarlo. |
SQL - Conocer si un procedimiento, tabla, etc. existe en la base de datos
A continuación se detalla el diseño de la tabla sysobjects. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ejemplo de uso: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
--Verificamos si el procedimiento que vamos a crear existe en la base de datos, |
SQL - Devolver errores y advertencias desde un procedimiento almacenado de SQL Server
En diversas situaciones requerimos poder regresar advertencias o errores personalizados desde un procedimiento almacenado, en el presente articulo veremos como lograrlo.
Si se genera un error en SQL donde su gravedad sea igual o menor a 10 solo se lanza una advertencia sin generar una excepción, sin embargo, si la gravedad fue igual o mayor a 11 es lanzada una excepción y es probable que el procedimiento almacenado sea anulado. Es importante contar también con un manejo de transacciones para que se ejecute o no completo nuestro stored.
/* --------------------------------------------------------------------------------
Autor: Mario Alberto Sanchez Gamboa
Fecha:
Descripcion: Procedimiento que lanza un error personalizado.
Actualizacion:
-------------------------------------------------------------------------------- */
ALTER PROCEDURE spTemporal
@param1 BIT
AS
BEGIN
IF @param1 = 1
BEGIN
RETURN 0
END
ELSE
BEGIN
RAISERROR ('Error personalizado al momento de ejecutar el procedimiento.', 11, 1)
RETURN -1
END
END
Si ejecutamos el stored anterior con un valor de diferente a 1 será lanzado el error personalizado.
EXEC spTemporal 0
Resultado:
Server: Msg 50000, Level 11, State 1, Procedure spTemporal, Line 18
Error personalizado al momento de ejecutar el procedimiento.
SQL - Generar números de filas haciendo uso de Tablas Temporales
IDENTITY Nos permite generar valores secuenciales, con base en los parámetros que se establezcan SELECT IDENTITY(TipoDato, ValorInicial, Incremento) AS ID_Num
Esta sentencia la podemos utilizar solo cuando SELECT contiene la clausula INTO. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Tablas Temporales Para hacer uso de la clausula INTO creamos una tabla temporal de la siguiente forma: SELECT IDENTITY(INT, 1, 1) AS ID, CustomerID, CompanyName, ContactName, Country INTO #TMP_CUSTOMER FROM Customers ORDER BY Country SELECT * FROM #TMP_CUSTOMER DROP TABLE #TMP_CUSTOMER En este ejemplo obtenemos los clientes de la tabla Customers ordenados por su campo Country de la base de datos Northwind y parte del resultado obtenido es: | ||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Ahora, si la tabla de la cual vamos a obtener la información contiene una columna IDENTITY, el motor encontrará que hay 2 columnas INDENTITY en la tabla a generar, produciendo un error. Para solucionar este problema es necesario convertir la columna IDENTITY de la tabla que causa el problema al mismo tipo de dato (lo que hacemos es quitarle el IDENTITY) Por ejemplo, la tabla Products de la base de datos Northwind tiene definida la propiedad IDENTITY en la columna ProductID. SELECT IDENTITY(INT, 1, 1) AS ID, CAST(ProductID AS INT) AS ProductID, ProductName INTO #TMP_PRODUCTS FROM Products SELECT * FROM #TMP_PRODUCTS DROP TABLE #TMP_PRODUCTS Parte del resultado de este ejemplo es el siguiente: | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
Información técnica en español - MSDN
domingo, 30 de julio de 2006
Sitio Smart-Solutions Developers
domingo, 23 de julio de 2006
TIP - JavaScript - Evitar el back de páginas Web
/****************************************************************
Evita el back de las paginas.
****************************************************************/
window.history.forward(1);
Espero y les ahorre algunos dolores de cabeza.
JAVA - Agregar un Servidor de aplicaciones en Eclipse
- Instalar JDK.
- Instalar un Servidor Web de aplicaciones para Java como por ejemplo Apache Tomcat.
- Instalación de Eclipse.
sábado, 22 de julio de 2006
JAVA - Cear un Servlet en Eclipse
Cear un Servlet y leer un parámetro de la URL haciendo uso de Eclipse
A continuación veremos como crear un Servlet en un proyecto Web haciendo uso del IDE Eclipse. Pre-Requisitos:- Instalar JDK.
- Instalar un Servidor Web de aplicaciones para Java como por ejemplo Apache Tomcat.
- Instalación de Eclipse.
- Creación de un proyecto Web con Eclipse (para mayor información ver el artículo JAVA - Cear una aplicación Web con Eclipse).
package com.sanchez_soft;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class for Servlet: ServletPrueba
*
*/
public class ServletPrueba extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
{
private static final String CONTENT_TYPE = "text/html; charset=windows-1252";
public ServletPrueba()
{
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String usuarioNombre = "";
try
{
usuarioNombre = request.getParameter("usuarioNombre");
}
catch(Exception e)
{
e.printStackTrace();
}
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println("");
out.println(" Bienvenido " + usuarioNombre + "!!
");
out.println("");
out.close();
}
}
Una vez que hemos escrito algo a visualizar, ejecutaremos nuestro Servlet como se muestra en la siguiente imagen.
Atención: un error sumamente común es tener el servidor de aplicaciones corriendo he intentar ejecutar nuestra aplicación Web con Eclipse, si realizamos esto nos aparecerá un mensaje de error indicandonos que el servicio ya esta iniciado y que no se puede hacer otra petición en los mismos puertos.
Para solucionar esto y evitar que esto nos ocurra constantemente, debemos apagar nuestro servidor y configurar para que el encendido sea manual y no automático. Para ello seguir las siguientes instrucciones:
Acceder a la Administración de Servicios.
Seleccionar el servicio de Apache Tomcat (o el del server que esten ejecutando). Damos clic en él con el botón secundario del mouse y clic en la opción de Propiedades.
En la ventana de propiedades Seleccionamos el tipo de inicio como Manual y paramos el servicio dando clic en el botón Stop, y finalmente damos clic en el botón Ok.
Ahora si regresamos a nuestra aplicación y la ejecutamos.
Una vez ejecutado nuestro servlet, nos aparecerá una pantalla similar a la siguiente:
Modificamos la url para pasarle un valor al parámetro usuarioNombre, el cual leemos en nuestro servlet, y la pantalla que visualizariamos sería una similar a la siguiente.
Listo!! Ya hemos creado un Servlet y realizado la lectura del valor de un parámetro que recibimos por URL.
JAVA - Cear una aplicación Web con Eclipse
domingo, 9 de julio de 2006
ColdFusion - Consumir Servicios Web (Consuming Web Services)
Proceso para consumir un Servicio Web desde ColdFusion.
Existen diversas formas para acceder a un servicio web, a continuación se muestran algunas de ellas:
Forma 1 |
<!--Invoca el método para obtener la equivalencia entre monedas de 2 paises --> <cfinvoke webservice="http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl" method="getRate" returnvariable="aRate"> <cfinvokeargument name="pais1" value="united states "> <cfinvokeargument name="pais2" value="mexico"/> </cfinvoke> 1 USD : <cfoutput>#aRate#</cfoutput> Pesos Mexicanos <br /> |
Descripción: Pegar el código arriba visualizado en su página cfm, con ello obtendra acceso al servicio WEB de equivalencia de monedas. Para este punto tu necesitaras reemplazar el valor del atributo value de los parametros pais1 y pais2 con los nombres de los paises que deseas usar para la conversion entre monedas. Para ver la lista de los paises disponibles ver http://www.xmethods.net/ve2/ViewListing.po?key=uuid:D784C184-99B2-DA25-ED45-3665D11A12E5. |
Forma 2 |
<!--Invoca el método para obtener la equivalencia entre monedas de 2 paises --> <cfobject webservice="http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl" name="ces"> <cfset aRate = ces.getRate("united states ", "mexico")> 1 USD: <cfoutput>#aRate#</cfoutput> Pesos Mexicanos |
Descripción: Crea un objeto llamado ces el cual hace referencia al servicio web. Posteriormente se invoca al método getRate del objeto ces pasandole como parametros el pais1 y pais2 para que el servicio web nos obtenga la equivalencia de las monedas entre el Mexico y Estados Unidos, y el resultado se asigna a la variable aRate. Nota: Pegar el código arriba visualizado en su página cfm, con ello obtendra acceso al servicio WEB de intercambio de monedas. |
Forma 3 |
<!--Invoca el método para obtener la equivalencia entre monedas de 2 paises --> <cfscript> ces = createObject("webservice", "http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl"); aRate = ces.getRate("reemplazarPorPais1", "reemplazarPorPais2"); </cfscript> |
Descripción: Si esta haciendo uso de CFScript, puedes llamar el servicio web usando la función createObject(). Crea un objeto llamado ces el cual hace referencia al servicio Web. Posteriormente se invoca al método getRate del objeto ces pasandole como parametros el pais1 y pais2 para que el servicio web nos obtenga la equivalencia entre las monedas del pais1 y del pais2, y el resultado se asigna a la variable aRate. El primer parámetro de la función createObject() indica a ColdFusion que llame un servicio web. El segundo parámetro especifica la URL absoluta al archivo WSDL del servicio Web o el nombre del servicio Web registrado en el administrador de ColdFusion. Nota: Pegar el código arriba visualizado en su página cfm, con ello obtendra acceso al servicio WEB de autenticación por directorio activo. |
miércoles, 5 de julio de 2006
Herramientas libres (free)
Navegadores Web
- FireFox (http://www.mozilla.com/firefox/).- Excelente navegador. Podemos descargar skins o temas los cuales permiten cambiar la apariencia del navegador para agradar a la vista del usuario, permite abrir diversas páginas web sin necesidad de abrir una nueva ventana, así mismo se pueden descargar diversos plugins o extensiones con los cuales podemos leer desde nuestros emails hasta apoyarnos para el desarrollo de nuestras aplicaciones web. Algunas de las extensiones recomendadas son las siguientes: Web Developer, Console, JavaScript Debugger.
- Internet Explorer. Si actualmente usas o deseas utilizar Microsoft Internet Explorer y eres desarrollador de aplicaciones Web te recomiendo descargar la versión Beta Internet Explorer Developer Toolbar el cual es muy similar a la extensión Web Developer para FireFox. Acceder a la siguiente dirección http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en o realizar una búsqueda en google (download Internet Explorer Developer Toolbar)
IDEs para Desarrollo Java
- Eclipse (http://www.eclipse.org/).- Excelente IDE para desarrollo en diversos lenguajes como Java, C++, PHP. Cuenta con una gran cantidad de plugins lo cual permite ampliar en gran medida su potencial para el desarrollo de aplicaciones. Cuenta con plugins para realizar modelos UML, reportes, AJAX, etc.
- JDeveloper (http://www.oracle.com/technology/products/jdev/).- Herramienta libre proporcionada por Oracle para el desarrollo de aplicaciones Java y PHP.
- NetBeans (http://www.netbeans.org/downloads/).- IDE para el desarrollo de aplicaciones con el lenguaje Java, C++.
Administradores para base de datos
- Oracle SQL Developer (http://www.oracle.com/technology/products/database/sql_developer/).- Herramienta gráfica para el desarrollo con base de datos Oracle para SQL. Esta herramienta nos permite la búsqueda de objetos, correr sentencias y scripts SQL, editar y debugear declaraciones PL-SQL. Hay diversas versiones para sistemas operativos Linux, Windows y Mac OSX.
- Aqua Data Studio (http://www.aquafold.com/).- Herramienta administrativa que permite a los desarrolladores crear, editar y executar script SQL, así como visualizar y modificar estructuras de la base de datos de manera muy fácil.
Herramientas XML
- XML Spy (http://www.altova.com/download.html).- Herramienta para el ambiente de desarrollo para el modelado, edición, transformación y debugeo para tecnologías relacionadas a XML.
Estas son solo algunas de las muchas herramientas que podemos encontrar en internet, las cuales son gratuitas y que cuentan con una excelente calidad.
miércoles, 28 de junio de 2006
JAVA - Crear un archivo JAR
- jar cf arvhivo.jar archivo(s)-de entrada
- jar cf mycompany.jar mycompany/*.class
Argumentos que se pueden utilizar con el comando jar:
- La opción c indica que quieres crear un fichero JAR.
- La opción f indica que quieres que la salida vaya a un archivo en vez de a stdout.
- Archivo es el nombre que quieres para el archivo JAR resultante. Puedes utilizar cualquier nombre de archivo. No es obligatorio que el archivo JAR contenga la extensión .jar, aunque se recomienda que asi sea.
- El argumento archivo(s)-de entrada es una lista delimitada por espacios de uno o más archivos que deben ser situados dentro de tu archivo JAR. Este argumento puede tener simbolo del comodín *. Si alguno de los archivo(s)-de entrada, es un directorio, el contenido de dicho directorio se añadirá al archivo JAR recursivamente.
Las opciones c y f pueden aparecer en cualquier orden, pero no debe existir ningún espacio entre ellas.
Este comando generará un archivo comprimido y lo colocará en el directorio actual.
También se puede añadir cualquiera de las siguientes opciones:
- v - produce un salida en stderr (en versión 1.1) o stdout (en versión 1.2) mientras se construye el archivo. La salida te dice el nombre de cada archivo añadido al archivo JAR.
- M - indica que no se debería producir el archivo de manifiesto (META-INF/MANIFEST.MF) por defecto.
- m - utilizada para incluir información de manifiesto desde un archivo de manifiesto existente.
- 0 - indica que no quieres que el archivo JAR sea comprimido.
Ejemplo:
C:\jdev1012\jdk\bin>jar cvf Company.Autentica.jar Company
Busca la ubicacion de tu jdk, en mi caso no eh instalado el jdk pero como estoy trabajando con jdeveloper, ubico la direccion del jdk y accedo al directorio bin. Una vez aqui, copio el directorio que contiene las clases y archivos que deseo integrar al archivo jar, y entonces procedo a ejecutar el comando arriba mencionado. Una vez ejecutado el comando se genera el archivo Company.Autentica.jar y ahora si, ya lo podemos incluir como una libreria en otros proyectos.
Directorio que contiene los archivos a integrar en nuestro .jar
Archivo .jar generado.
sábado, 20 de mayo de 2006
AJAX - Google Web Toolkit
domingo, 23 de abril de 2006
Mi primer blog
- Patrones de diseno y Arquitectura
- Java
- .NET 2003 y 2005 (aspx y C#)
- SQL
- UML
- XML
- AJAX y JavaScript
- CSS/CSS2
- HTML
- Tips