jueves, 12 de diciembre de 2013

Secuencias de Tablas

SECUENCIAS EN TABLAS DE ORACLE


Una secuencia de una tabla en la base de datos de Oracle, es un consecutivo que se quiere llevar de cada uno de los registros que vamos a ingresar en dicha tabla. Para esto creamos la sencuencia de la siguiente forma:

create sequence NOMBRESECUENCIA
  start with VALORENTERO
  increment by VALORENTERO
  maxvalue VALORENTERO
  minvalue VALORENTERO
  cycle | nocycle;

- La cláusula "start with" indica el valor desde el cual comenzará la generación de números secuenciales. Si no se especifica, se inicia con el valor que indique "minvalue".

- La cláusula "increment by" especifica el incremento, es decir, la diferencia entre los números de la secuencia; debe ser un valor numérico entero positivo o negativo diferente de 0. Si no se indica, por defecto es 1.

- "maxvalue" define el valor máximo para la secuencia. Si se omite, por defecto es 99999999999999999999999999.

- "minvalue" establece el valor mínimo de la secuencia. Si se omite será 1.

- La cláusula "cycle" indica que, cuando la secuencia llegue a máximo valor (valor de "maxvalue") se reinicie, comenzando con el mínimo valor ("minvalue") nuevamente, es decir, la secuencia vuelve a utilizar los números. Si se omite, por defecto la secuencia se crea "nocycle".

Si no se especifica ninguna cláusula, excepto el nombre de la secuencia, por defecto, comenzará en 1, se incrementará en 1, el mínimo valor será 1, el máximo será 999999999999999999999999999 y "nocycle".

En el siguiente ejemplo creamos una secuencia llamada "sec_codigolibros", estableciendo que comience en 1, sus valores estén entre 1 y 99999 y se incrementen en 1, por defecto, será "nocycle":

 create sequence sec_codigolibros
  start with 1
  increment by 1
  maxvalue 99999
  minvalue 1;

Si bien, las secuencias son independientes de las tablas, se utilizarán generalmente para una tabla específica, por lo tanto, es conveniente darle un nombre que referencie a la misma.

Otro ejemplo:

 create sequence sec_numerosocios
  increment by 5
  cycle;

La secuencia anterior, "sec_numerosocios", incrementa sus valores en 5 y al llegar al máximo valor recomenzará la secuencia desde el valor mínimo; no se especifican las otras cláusulas, por lo tanto, por defecto, el valor mínimo es 1, el máximo 999999999999999999999999999 y el valor inicial es 1.

Dijimos que las secuencias son tablas; por lo tanto se accede a ellas mediante consultas, empleando "select". La diferencia es que utilizamos pseudocolumnas para recuperar el valor actual y el siguiente de la secuencia. Estas pseudocolumnas pueden incluirse en el "from" de una consulta a otra tabla o de la tabla "dual".

Para consultar el próximo valor de la secuencia, ejecutamos la siguiente consulta:
select nombreSecuencia.nextval from dual;

Para consulta el valor actual de la secuencia, ejecutamos la siguiente consulta:
select nombreSecuencia.currval from dual;

Referencia:  oracleya

sábado, 17 de agosto de 2013

No conecta la VPN de Cisco

Como arreglarlo

  • Presiona Win + R y digita regedit para que se abra el editor del registro.
  • Navegamos hasta la siguiente clave:  HKLM\SYSTEM\CurrentControlSet\Services\CVirtA
  • Doble clic en DisplayName y para arquitectura del procesador x86, cambiamos el valor del dato “@oem8.inf,%CVirtA_Desc%;Cisco Systems VPN Adapter” por el siguiente “Cisco Systems VPN Adapter”
  • Para arquitectura x64 cambiamos el valor del dato “@oem8.inf,%CVirtA_Desc%;Cisco Systems VPN Adapter for 64-bit Windows” por el siguiente “Cisco Systems VPN Adapter for 64-bit Windows”
Cerramos el editor del registro e intentamos conectarnos nuevamente. A veces no se requiere reiniciar el cliente de la VPN para que esto funcione, ni tampoco el equipo.

viernes, 16 de agosto de 2013

Series de TV



El banquete de la producción audiovisual contemporánea tiene en las series de televisión el mejor bocado. Las audiencias no mienten: hay series que obtienen la fidelidad que muchos amantes quisieran para ellos. 

Fidelidad y devoción. Pues se podrían contar por miles los fanáticos que repiten, una y otra vez, las seis temporadas de un proyecto llamado Los Soprano o de otro conocido como Mad Men. Ya pasaron seis años y dos meses desde que se emitió el último capítulo de Los Soprano y todavía hoy gana cautivos. 

Así lo expresa el crítico de televisión Ómar Rincón, quien asegura que Breaking Bad, la serie cuya quinta y última temporada se emite desde el domingo pasado en Estados Unidos, hace mucho rato entró a la categoría de culto. 

Infinidad de medios -especializados o no-, han analizado el impacto de esta serie en la historia actual de la televisión. Y explican parte de su poderosa atracción en el trabajo realizado porBryan Cranston en su representación de Walter White, un tranquilo profesor de química que llevado por las circunstancias, empieza a sintetizar metanfetaminas y luego a venderlas para convertirse en objetivo de la DEA. Y la bola de nieve adquiere proporciones impresionantes para este personaje, su cómplice y su familia. 

"Creo que este proyecto gusta mucho entre el televidente más sofisticado. Los Soprano podría tener un poco más de pegamento al cine, Lost pertenece más a los fanáticos de las redes sociales, Mad Men es de los que somos más mediáticos y buscadores de historias. Esta serie le gusta mucho a la gente que conoce el lenguaje audiovisual y que sabe de fotografía y narración", dice Rincón. 

Como valores fundamentales Breaking Bad tiene, según este analista, "la calidad del guión, la manera de contarlo, la fuerza del personaje y su antiestética televisiva". Rincón agrega que este es un personaje "angustiante, que no comete ninguna emoción esperanzadora. Yo creo que no hay mucha gente capaz de ver varios capítulos seguidos, es un personaje muy angustiante". 

En una entrevista publicada por El País de España, Cranston describe su manera de construir el personaje. 

"Pensé en mi padre, un tipo cargado de espaldas. Alguien deprimido cuando le vemos por primera vez. Ha visto pasar tantas oportunidades fallidas que solo pone un pie delante del otro. Quise que fuera invisible; su piel, su ropa, nada tenía que llamar la atención. Y luego está el pelo. Fundamental en su transformación. Me informé de los efectos de la quimioterapia, pero me interesó más cómo el pelo afecta a nuestra forma de leer un rostro. El pelo nos suaviza la cara. Por eso una cabeza rapada es lo contrario. Y si encima le dejas la barba, el efecto es amenazante".

miércoles, 3 de abril de 2013

¿Cómo se puede formatear cadenas de texto?


Cuando tenemos un texto y hacemos lo siguiente:
Console.WriteLine("La cantidad de dinero que tengo en el banco es : {0:C}",dinero);

Ese :C de más quiere decir que formatearemos la entrada como una moneda, por ejemplo en el caso del peso Colombiano, yen japonés, el euro alemán o el peso mexicano. La C determina el tipo de formato, y la cultura, la forma de llevarlo a cabo.

Otros ejemplos son: D para decimal, E para notación exponencial o científica, F para punto decimal fijo (i.e. 4 => 4.0), G para la versión general, es decir, la más compacta posible; N para un número con separador de miles, decimales, etc.; P para porcentaje, R para redondear, X para hexadecimal.

 s = string.Format("{0:D}", 99901); // s == 99901
s = string.Format("{0:D10}", 99901); // s == 0000099901
s = string.Format("{0:E}", 1983.42"); // s == 1.98342E+003
s = string.Format("{0:F2}", 1983"); // s == 1983.00
s = string.Format("{0:F3}", 1983.4266"); // s == 1983.427
s = string.Format(japones, "{0:N}", 1983.55); // s == 1.983,55
s = string.Format("{0:P}", 0.42); // s == 42 %
s = string.Format("{0:X4}", 255); // s == 00FF
Si ninguna de estas nos satisface, podemos crear nuestro propio formato mediante el formato de números especializado. Para hacer esto, podemos colocar en lugar del D, E, C, etc., un 0 para representar un dígito, si existe, o un cero si no; un # para representar un dígito si existe, si no, no muestra nada; El punto . para separar decimales y la coma para separar grupos. Asimismo, tenemos % para porcentaje, ‰ para por-miles, E0 para notación exponencial, ‘cadena’ para poner una cadena de texto fija.

 s = string.Format("{0:0,00.00#:D}", 99.1); // s == 0,99.10
s = string.Format(aleman, "{0:0,00.00#:D}", 99.1); // s == 0.99,10
s = string.Format("{0:000,000.000}", 9991); // s == 009,991.000
s = string.Format("{0:#,#00}", 99.1); // s == 99
s = string.Format("{0:#,#00}", 9.1); // s == 09
s = string.Format("{0:#,#00}", 9999.1); // s == 9,999
s = string.Format("{0:##-###-##}", 99942); // s == 999-42
s = string.Format("{0:##-###-##}", 4299942); // s == 42-999-42
El formato también podemos aplicarlo a las fechas, de forma muy similar a como se aplica para números. Existen muchos formatos, pero los más utilizados son los siguientes: se usa la d y D para una fecha corta y una fecha larga, respectivamente; f y F para fecha con tiempo corto y largo, u y U para formato universal corto y largo.

 CultureInfo enUS = new CultureInfo("en-US");
CultureInfo deDE = new CultureInfo("de-DE");
CultureInfo esMX = new CultureInfo("es-MX");

DateTime tm = new DateTime(2012, 12, 04, 11, 05, 42);
s = string.Format(esMX, "{0:d}", tm); // s == 12/04/2012
s = string.Format(esMX, "{0:d}", tm); // s == 04/12/2012
s = string.Format(deDE, "{0:D}", tm); // s == Dienstag, 4. Dezember 2012
s = string.Format(enUS, "{0:f}", tm); // s == Tuesday, 4 Dic, 2012 11:05
Etcétera. También podemos utilizar formato especial usando y, M, d, m, h, M, s para representar año, mes, día, minuto hora, segundo, etc. Por ejemplo, cuatro yes suponen año en formato de cuatro dígitos, como 1983. Dos yes y tendríamos 83.

 s = string.Format(esMX, "{0:ddd d MMM}", tm);
// s == mar 4 dic
s = string.Format(esMX, "{0:dddd d MMMM}", tm);
// s == martes 4 diciembre
s = string.Format(esMX, "{0:H mm ss}", tm);
// s == 11 05 42
s = string.Format(esMX, "{0:y yy yyyy yyyyy}", tm);
// s == 2 12 2012 02012