miércoles, 10 de octubre de 2012

Buscar bloqueos en BD oracle

Como saber si tiene alguna query  que este bloquenado la BD? aqui esta la forma de saberlo.

select object_name, session_id,oracle_username, a.* from v$locked_object a, dba_objects b where a.object_id = b.object_id

jueves, 23 de agosto de 2012

Opciones de Cascada en Hibernate

Algo importante al utilizar las cascadas de hibernate en los hbm


  • none - do not do any cascades, let the users handles them by themselves. 
  • save-update - when the object is saved/updated, check the assoications and save/update any object that require it (including save/update the assoications in many-to-many scenario). 
  • delete - when the object is deleted, delete all the objects in the assoication. 
  • delete-orphan - when the object is deleted, delete all the objects in the assoication. In addition to that, when an object is removed from the assoication and not assoicated with another object (orphaned), also delete it. 
  • all - when an object is save/update/delete, check the assoications and save/update/delete all the objects found. 
  • all-delete-orphan - when an object is save/update/delete, check the assoications and save/update/delete all the objects found. In additional to that, when an object is removed from the assoication and not assoicated with another object (orphaned), also delete it.

miércoles, 18 de abril de 2012

Crear Procedures en Oracle

Como crear un procedimiento que realice un update en BD oracle?

Se crea un procedure con nombre NOMBRE_PROCEDURE que recibe 3 parametros de entrada y retorna 2 parametros de salida.

- variableUno: lista de ids que se les debe hacer el update
- variableDos: valor que se debe setear en algun campo a actualizar
- variableTres: alguna condicion adicional que debe cumplir
- salidaUno: String que recoge todo lo que se actualizó
- salidaDos: Entero que retorna un codigo que permite comprobar que todo fue bien.


CREATE OR REPLACE PROCEDURE NOMBRE_PROCEDURE(
variableUno IN VARCHAR2,
variableDos IN VARCHAR2,
variableTres IN NUMBER,
salidaUno OUT NUMBER,
salidaDos OUT VARCHAR2
)
IS
TYPE ref1 IS REF CURSOR;
listaIds ref1;
indiceRecorrer NUMBER;

BEGIN
-- variableUno es un string separado por | donde se define una lista de ids ('1','2','3',...'n')
OPEN listaIds FOR SELECT t.* FROM TABLE(FN_SPLIT(variableUno,'|')) t;

LOOP
FETCH listaIds into indiceRecorrer;
EXIT WHEN listaIds%NOTFOUND;

--realizamos alguna accion
UPDATE TABLA_ACTUALIZAR SET ALGUN_CAMPO_ACTUALIZAR = variableDos WHERE ID_ACTUALIZAR = indiceRecorrer AND ALGUNA_COLUMNA_CONDICION = variableTres;

--recogo los ids actualizados (indiceRecorrer)
salidaUno := salidaUno || to_char(indiceRecorrer) || ',';

END LOOP;
salidaDos := 0; -- fuera del procedure se comprueba si salidaDos es == 0 entonces todo ha ido bien, sino ha sucedido algun error.

COMMIT;

EXCEPTION
WHEN OTHERS THEN
salidaDos := -1000;
DBMS_OUTPUT.PUT_LINE('SE PRODUJO UN ERROR EN EL PROCESO, SE REALIZARA UN ROLLBACK.' || SQLCODE || SQLERRM);
ROLLBACK;
RAISE;

END NOMBRE_PROCEDURE;
/

lunes, 22 de agosto de 2011

Expresiones Regulares

Dejo link de 10 expresiones regulares muy utiles para las validaciones web

http://web.ontuts.com/snippets/10-expresiones-regulares-imprescindibles-en-desarrollo-web/

-validar url
-validar emailhttp://www.blogger.com/img/blank.gif
-comprobar seguridad de contraseña
-validar numero de telefono
-validar numero de tarjeta de credito
-validar codigo postal
-validar ip
-otros......

Para entender que hace cada uno de los caracteres que se incluyen en cada expresion revisar la documentacion de wikipedia

http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

jueves, 23 de diciembre de 2010

String a Date en Java

Les dejo un metodo que transforma un String a un Date en Java.



private final static SimpleDateFormat FECHANORMAL = new SimpleDateFormat("d/M/y");

public static Date fecha2Date(String fechaString) throws ParseException {

Date fechaDate = null;
String fechaNormal = fechaString;
if (fechaNormal != null) {

fechaNormal = fechaNormal.trim();
fechaNormal = fechaNormal.replaceAll("-", "/"); // Aceptamos dd-mm-yyyy o dd/mm/yyyy
if (fechaNormal.indexOf('/') >= 0 && !"".equals(fechaNormal)) {

fechaDate = FECHANORMAL.parse(fechaNormal);
}

}


return fechaDate;
}

martes, 29 de junio de 2010

Formato de Celdas en EXCEL - tipo Numero - No Numero cientifico

Cuando se crean archivos excel desde paginas, siempre tengo problemas con los formatos de las celdas, por lo que he investigado y he podido encontrar una solucion aceptable.

cuando en las celda del excel (tabla html) que se va a exportar son numeros, por ejemplo:
<td>502682196768</td>

el resultado en excel de esto será

5,02682E+11

pero si le agregamos un estilo que interpreta excel nos mostrara como numero normal
es decir:

<td style='mso-number-format:0;'>502682196768</td>

502682196768

entonces la clave del formato esta en agregar lo siguiente a la celda.

style='mso-number-format:0;'


espero ayudar a muchos que tienen el mismo problema.

yo he navegado por muchos sitios y la mejor opcion que habia encontrado era agregar un espacio al numero para que éste no sea convertido a numero cientifico, pero esta solucion tenia como problema que los valores no se podia sumar o aplicar una formula sobre este.
ahora con la solucion que propongo si es posible agregar una formula de agregacion y que el resultado sea tambien un numero no cientifico.

TAN TAN.

martes, 23 de marzo de 2010

Leer Campo XML en SQL Server

Como podemos leer campo XML y filtrar por campos que estan dentro del XML

tenemos esta tabla




como ejemplo tenemos el siguiente XML:




para leer el campo XML de la tabla TabXML , en el campo XMLData, se hace de la siguiente forma

SELECT
ID,
D.C.value('@Nombre', 'Varchar(30)') as Nombre,
D.C.value('@Apellido', 'Varchar(30)') as Apellido,
D.C.value('@telefono', 'Varchar(10)') as Telefono,
D.C.value('@Email', 'Varchar(100)') as Email
FROM TabXML
CROSS APPLY XMLData.nodes('ROOT/VALORES') D(c) -- recuerda que XMLData es el nombre del campo donde esta el XML
WHERE D.c.value('@Nombre', 'varchar(30)') = 'Sergio'

este query mostrara el resultado , todas los registros en donde el nombre sea igual a 'Sergio'

ID Nombre Apellido Fono Email
1 Sergio Valenzuela 555444 Sergio.Valenzuela@engendro.cl
1 Sergio Apell2 555444 Sergio.Valenzuela@engendro.cl
1 Sergio Apell3 555444 Sergio.Valenzuela@engendro.cl

tambien es posible agregar campos de la tabla donde esta el campo XML
si existienran mas registros donde el campo Nombre del XML del campo XMLData sean 'Sergio', entonces mostrara mas registros.

/*************************************************************************

ejemplo Actualizado..... me confundí


DECLARE @TabXML TABLE (
ID INT,
DocXMLData XML
)
DECLARE @XML XML
SELECT @XML = '<ROOT><VALORES Nombre="Sergio" Apellido="Valenzuela" Fono="555444" Email="Sergio.Valenzuela@engendro.cl">
</VALORES>
<VALORES Nombre="Sergio" Apellido="Apell2" Fono="555444" Email="Sergio.Valenzuela@engendro.cl">
</VALORES>
<VALORES Nombre="Sergio" Apellido="Apell3" Fono="555444" Email="Sergio.Valenzuela@engendro.cl">
</VALORES>
<VALORES Nombre="Carlos" Apellido="Apell3" Fono="555444" Email="Sergio.Valenzuela@engendro.cl">
</VALORES>
</ROOT>'

INSERT INTO @TabXML
(
ID,
DocXMLData
)
VALUES
(
1,
@XML
)

SELECT tx.DocXMLData FROM @TabXML tx

SELECT --D.C.value(*)
ID,
D.C.value('@Nombre', 'Varchar(30)') as Nombre,
D.C.value('@Apellido', 'Varchar(30)') as Apellido,
D.C.value('@Fono', 'Varchar(10)') as Telefono,
D.C.value('@Email', 'Varchar(29)') as Email
FROM @TabXML
CROSS APPLY DocXMLData.nodes('ROOT/VALORES') D(c) -- recuerda que XMLData es el nombre del campo donde esta el XML
WHERE D.c.value('@Nombre', 'varchar(30)') = 'Sergio'


*************************************************************************/