Hola,
Simplemente anunciar la creación de dos nuevos blogs por parte de unos buenos compañeros:
- InfoWorld
- BE CRM
- De todo un poco
¡Les deseo lo mejor y muchas, muchas visitas!
(Editado el 02/10/2008 para añadir el tercer blog)
miércoles, 24 de septiembre de 2008
Han nacido tres nuevos blogs amigos
Publicado por Gon en 17:39 0 comentarios
Etiquetas: Varios
Jobs en Oracle, .NET y errores con el idioma
Hola,
Siguiendo con el post anterior me pasó algo muy curioso, tenía unos Procedimientos Almacenados (SP) con unos parámetros de fecha, y a pesar de que iban como una cadena texto fijo, a la hora de llegar a ejecutarse en Oracle me fallaban.
Ejemplo: paquete.nombreSP('M', '01/01/2003', '31/12/'TO_CHAR(sysdate,'RRRR'),NULL);
Si el programa se ejecutaba en un SO en español funcionaba sin problemas, el fallo se producía cuando se ejecutaba en un SO en ingles que entonces se producía la siguiente excepción en Oracle:
ORA-12012: error on auto execute of job 2513
ORA-01843: not a valid month
ORA-06512: at line 1
Para solucionarlo es necesario añadir un poco de código respecto al que se vió en el post anterior que lo que va a hacer es cambiar la cultura del thread que llama a Oracle y lo vamos a forzar a que siempre sea en español (de España) y de esta manera Oracle 'se lo traga' sin problemas.
En el constructor ponemos esto:
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
Y cuando ponemos el código que 'ataque' a la base de datos añadimos:
cmdSet.Connection = conn;
cmdSet.CommandType = System.Data.CommandType.Text;
cmdSet.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/RR'";
Finalmente, antes de ejecutar la 'query' que llama al 'job' de Oracle será necesario poner la siguiente línea:
cmdSet.ExecuteNonQuery();
En resumen, lo que estamos haciendo es ejecutar una sentencia SQL en Oracle antes de lanzar nuestro 'job' para que la sesión asociada a nuestra conexión la cambie a Español con el formato de fecha día/mes/año.
Si os pasa luego no digáis que no os avise ;-)
Salu2
Publicado por Gon en 12:05 0 comentarios
Etiquetas: Oracle, Visual Studio
martes, 23 de septiembre de 2008
Jobs, Oracle y .NET
Hola,
A modo introductorio de un post posterior a este voy a contaros como lanzar un job en Oracle desde un código .NET gracias al SP que se nos proporciona DBMS_JOB.submit
En su forma más básica sería algo parecido a esto:
Oracle.DataAccess.Client.OracleConnection conn = new Oracle.DataAccess.Client.OracleConnection(connString);
Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand();
Oracle.DataAccess.Client.OracleParameter paramID = new Oracle.DataAccess.Client.OracleParameter();
Oracle.DataAccess.Client.OracleParameter paramOpID = new Oracle.DataAccess.Client.OracleParameter();
Oracle.DataAccess.Client.OracleParameter paramOpWhat = new Oracle.DataAccess.Client.OracleParameter();
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "DBMS_JOB.submit";
paramOpID.ParameterName = "id";
paramOpID.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Decimal;
paramOpID.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(paramOpID);
paramOpWhat.ParameterName = "What";
paramOpWhat.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2;
paramOpWhat.Direction = System.Data.ParameterDirection.Input;
paramOpWhat.Value = @jobName;
cmd.Parameters.Add(paramOpWhat);
conn.Open();
cmd.ExecuteNonQuery();
return paramOpID.Value.ToString();
Este SP tiene muchos otros parámetros que recomiendo que veáis en la siguiente web: http://www.psoug.org/reference/dbms_job.html
Salu2
Publicado por Gon en 15:08 0 comentarios
Etiquetas: Oracle, Visual Studio