miércoles, 29 de agosto de 2012

Consultas en bases de datos SQL Server


Para realizar una consulta a una base de datos SQL Server, realizaremos lo siguiente como lo veremos en el ejemplo:

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString =
            "Data Source=(local);Initial Catalog=Northwind;"
            + "Integrated Security=true";

        // Provide the query string with a parameter placeholder.
        string queryString =
            "SELECT ProductID, UnitPrice, ProductName from dbo.products "
                + "WHERE UnitPrice > @pricePoint "
                + "ORDER BY UnitPrice DESC;";

        // Specify the parameter value.
        int paramValue = 5;

        // Create and open the connection in a using block. This
        // ensures that all resources will be closed and disposed
        // when the code exits.
        using (SqlConnection connection =
            new SqlConnection(connectionString))
        {
            // Create the Command and Parameter objects.
            SqlCommand command = new SqlCommand(queryString, connection);
            command.Parameters.AddWithValue("@pricePoint", paramValue);

            // Open the connection in a try/catch block.
            // Create and execute the DataReader, writing the result
            // set to the console window.
            try
            {
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}",
                        reader[0], reader[1], reader[2]);
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }
    }

lunes, 27 de agosto de 2012

SECUENCIAS EN ORACLE (PARA SIMULAR EL AUTOINCREMENTO) CONCEPTO

muestra cómo utilizar las secuencias de Oracle para simular el tipo de datos autoincremento de otros motores de bases de datos (Access, MySQL, Paradox, DBase, etc). Incluye ejemplos en SQL utlizando el comando  create sequence
Mediante las secuencias, Oracle puede proporcionar una lista consecutiva de números unívocos que sirve para simplificar las tareas de programación. La primera vez que una consulta llama a una secuencia, se devuelve un valor predeterminado. En las sucesivas consultas se obtendrá un valor incrementado según el tipo de incremento especificado. Las secuencias pueden ser útiles, por ejemplo, para simular el tipo de datos AUTOINCREMENTO de Paradox, Access y MySQL.
¿Cómo crear una secuencia mediante SQL?
Para crear una secuencia en Oracle mediante SQL utilizaremos el comando create sequence con la siguiente sintaxis:
CREATE SEQUENCE nombre_secuencia
INCREMENT BY numero_incremento
START WITH numero_por_el_que_empezara
MAXVALUE valor_maximo | NOMAXVALUE
MINVALUE valor_minimo | NOMINVALUE
CYCLE | NOCYCLE
ORDER | NOORDER
Por ejemplo, si queremos crear una secuencia que empiece en 100 y se incremente de uno en uno utilizaremos la siguiente consulta SQL:
CREATE SEQUENCE incremento_id_cliente
INCREMENT BY 1
START WITH 100
Para utilizar la secuencia, en primer lugar, crearemos una tabla de prueba (para insertar un registro y comprobar que la secuencia anterior funciona correctamente):
create table clientes (
codigo number not null primary key,
nombre varchar2(100) unique not null,
cif varchar2(15) unique,
fechaalta date)
Para utilizar la secuencia creada en una inserción de fila:
insert into clientes values (
incremento_id_cliente.NextVal,
'AjpdSoft',
'11225522F',
sysdate)
Realizamos otra inserción para comprobar que el incremento es de 1:
insert into clientes values (
incremento_id_cliente.NextVal,
'Otro cliente',
'00000G',
sysdate)

lunes, 23 de julio de 2012

Función para concatenar campos


Algunas veces es necesario combinar en forma conjunta (concatenar) los resultados de varios campos diferentes.
Cada base de datos brinda una forma para realizar esto:
 Informix: ||
Oracle: CONCAT(), ||
 SQL Server: +
 MySQL: CONCAT()
La sintaxis para CONCAT() es la siguiente: CONCAT(cad1, cad2, cad3, ...): Concatenar cad1, cad2, cad3, y cualquier otra cadena juntas.
Por favor note que la función CONCAT() de Oracle sólo permite dos argumentos – sólo dos cadenas pueden colocarse juntas al mismo tiempo utilizando esta función.
Sin embargo, es posible concatenar más de dos cadenas al mismo tiempo en Oracle utilizando '||'. Observemos algunos ejemplos.
Supongamos que tenemos la siguiente tabla:
Tabla Geography region_name store_name East Boston East New York West Los Angeles West San Diego

 Ejemplo 1:
 MySQL/Oracle: SELECT CONCAT(region_name,store_name) FROM Geography WHERE store_name = 'Boston';
 Resultado : 'EastBoston'

 Ejemplo 2:
Oracle: SELECT region_name || ' ' || store_name FROM Geography WHERE store_name = 'Boston'; Resultado : 'East Boston'

 Ejemplo 3: SQL Server: SELECT region_name + ' ' + store_name FROM Geography WHERE store_name = 'Boston';
 Resultado : 'East Boston'

FORMATO FECHA EN ORACLE


Formatos de Fecha

La función TO_CHAR(,) traduce una fecha/hora (o parte de ella) a una cadena de caracteres, y TO_DATE(,) transforma una cadena de caracteres a una fecha, hora o combinación fecha/hora. Por ejemplo, TO_DATE('02/08/2002', 'DD/MM/YYYY') daría la fecha 2 de agosto de 2002. Si suponemos que un atributo FECHA almacena esa misma fecha a las 3 de la tarde, TO_CHAR(FECHA, 'DD-MON-YYYY HH:MI AM') devolvería el string 02-AGO-2002 03:00 PM. El formato es una cadena de caracteres en la que se indica el formato siguiendo las claves que se muestran en la Tabla 2.1. Esta tabla no incluye absolutamente todos los formatos, pero sí un buen número de ellos, que deberían ser más que suficientes para un uso normal. Tabla 2.1: Formatos de fecha en Oracle Siglos y años CC Siglo SCC Siglo. Si es AC (Antes de Cristo), lleva un signo YYYY Año, formato de 4 dígitos SYYY Año, formato de 4 dígitos. Si es AC lleva un signo YY Año, formato de 2 dígitos YEAR Año, escrito en letras y en inglés (por ejemplo, 'TWO THOUSAND TWO') SYEAR Ídem, pero si es AC lleva el signo BC Antes o Después de Cristo (AC o DC) para usar con los anteriores, por ejemplo YYYY BC Meses Q Trimestre: Ene-Mar=1, Abr-Jun=2, Jul-Sep=3, Oct-Dic=4 MM Número de mes (1-12) RM Número de mes en números romanos (I-XII) MONTH Nombre del mes completo rellenado con espacios hasta 10 espacios (SEPTIEMBRE) FMMONTH Nombre del mes completo, sin espacios adicionales MON Tres primeras letras del mes: ENE, FEB,... Semanas WW Semana del año (1-52) W Semana del mes (1-5) Días DDD Día del año (1-366) DD Día del mes (1-31) D Día de la semana (1-7) DAY Nombre del día de la semana rellenado a 9 espacios (MIÉRCOLES) FMDAY Nombre del día de la semana, sin espacios DY Tres primeras letras del nombre del día de la semana DDTH Día (ordinal): 7TH DDSPTH Día ordinal en palabra, en inglés: SEVENTH horas HH Hora del día (1-12) HH12 Hora del día (1-12) HH24 Hora del día (1-24) SPHH Hora del día, en palabra, inglés: SEVEN AM am o pm, para usar con HH, como 'HH:MI am' PM am o pm A.M. a.m. o p.m. P.M. a.m. o p.m. Minutos y segundos MI Minutos (0-59) SS Segundos (0-59) SSSS Segundos después de medianoche (0-86399) Además de estas palabras clave, el formato puede incluir espacios y los signos de puntuación -/,.;:. Cualquier otro carácter debe ir "entre comillas dobles". Finalmente, se debe indicar que los formatos de fecha que indican un periodo en palabras, como el nombre del mes o del día de la semana, seguirán el lenguaje de la instalación (de Oracle o del sistema operativo), por lo que no se garantiza que sea en español. Además, el uso de mayúsculas o minúsculas es significativo. Así, para el mes de agosto, MONTH produce AGOSTO , Month, Agosto , y month, agosto , y para el lunes, DY produce LUN y fmday, lunes (o su equivalente en inglés si así está configurado el idioma). Por ejemplo: SQL> select ename, 2 to_char(hiredate,'dd "de " fmmonth " de " yyyy') AS "Fecha de contrato" 3* from emp ENAME Fecha de contrato ---------- --------------------------- SMITH 17 de diciembre de 1980 ALLEN 20 de febrero de 1981 WARD 22 de febrero de 1981 JONES 02 de abril de 1981 MARTIN 28 de septiembre de 1981 BLAKE 01 de mayo de 1981 CLARK 09 de junio de 1981 SCOTT 09 de diciembre de 1982 KING 17 de noviembre de 1981 TURNER 08 de septiembre de 1981 ADAMS 12 de enero de 1983 JAMES 03 de diciembre de 1981 FORD 03 de diciembre de 1981 MILLER 23 de enero de 1982 14 filas seleccionadas.

Fechas en BD Informix

Para insertar una fecha en una consulta, se debe hacer de la siguiente forma como se ve en este ejemplo:
TO_DATE ('2012-03-01 14:28:00' ,'%Y-%m-%d %H:%M:%S' )

insert into hiepiact (acthis,actnum,acthex,actfen) 
values (708,'URGE',758,1,null,TO_DATE ('2012-03-01 14:28:00' ,'%Y-%m-%d %H:%M:%S' ))
Esto porque informix acepta solo el formato 'YYYY-MM-DD HH:MM:SS'.