Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

martes, 27 de agosto de 2019

C# Insertar fichero XML en Oracle



Requisitos:
IDE: Visual Studio 2005 .NET
Base de datos: Oracle



Paso 1: Creación aplicación escritorio

  • Vamos crear la siguiente interfaz.


  •        Cargar fichero XML.
     Vamos a mostrar el código del botón “Cargar”.
        private void btCargar_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Archivos XML | *.xml";
            openFileDialog1.Multiselect = false;
            openFileDialog1.ShowDialog();

            // Mostramos valor en el textbox
            txtRuta.Text = openFileDialog1.FileName;
        }

  • Llamada procedimiento almacenado (botón "Generar")
        private void btGenerar_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.FileName.Trim() != "")
            {

                // Objeto deconexión
                OracleConnection conn = new OracleConnection();

                try
                {                
                    conn.ConnectionString = "TuCadenaConexiónBD";

                    String procedimiento = "MIESQUEMA.PG_XML.PR_XML_TO_TABLE";

                    OracleCommand command = new OracleCommand();
                    command.Connection = conn;

                    command.CommandText = procedimiento;
                    command.CommandType = CommandType.StoredProcedure;

                    // Parametro XML
                    XmlDocument xmlDoc = new XmlDocument();
                    string ruta = openFileDialog1.FileName;
                    xmlDoc.Load(ruta);

                    string xml = xmlDoc.OuterXml;

                    OracleParameter param1 = new OracleParameter();
                    param1.OracleType = OracleType.Clob;
                    param1.Direction = ParameterDirection.Input;
                    param1.ParameterName = "pXmlContent";

                    param1.Value = xml;

                    command.Parameters.Add(param1);

                    // Parametros Salida Resultado
                    OracleParameter param2 = new OracleParameter();
                    param2.OracleType = OracleType.VarChar;
                    param2.Size = 500;
                    param2.Direction = ParameterDirection.InputOutput;
                    param2.ParameterName = "pResultado";
                    param2.Value = "";

                    command.Parameters.Add(param2);


                    conn.Open();
                    int exito = command.ExecuteNonQuery();

                    // Todo bien
                    if (exito == 1)
                    {
                        MessageBox.Show("Resultado: " + command.Parameters["pResultado"].Value.ToString());
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("ERROR: " + ex.Message.ToString());
                }
                finally
                {
                    // Cerramos Conexión
                    conn.Close();
                }
            }
            else
            {
                MessageBox.Show("No se ha seleccionado ningun fichero.");
            }
        }

NOTA: La variable "TuCadenaConexiónBD" se debe remplazar por tu cadena de conexión a la Base de datos.


Paso 2: Procedimiento para inserción del XML

  • Para ello hemos creado dentro de nuestra base de datos el paquete "PG_XML" y el procedimiento "PR_XML_TO_TABLE". Este procedimiento insertara el XML en la tabla “XML_TABLE”.
CREATE OR REPLACE PACKAGE BODY MIESQUEMA."PG_XML" 
AS

PROCEDURE PR_XML_TO_TABLE(
    pXmlContent IN CLOB, 
    pResultado  OUT VARCHAR2 
) 
IS

BEGIN
   
    INSERT INTO XML_TABLE 
    VALUES (SYSDATE, 9999, XMLTYPE(pXmlContent));

    pResultado := 'OK';
    
EXCEPTION 
    WHEN OTHERS THEN
        ROLLBACK;
        pResultado :=  'ERROR EN PG_XML.PR_XML_TO_TABLE: ' || SQLERRM;

END PR_XML_TO_TABLE;

END PG_XML;
/

Paso 3: Creación XML

    41975980Z
    Manuel
    Cruz
    Pérez
    617841085




Código fuente: aqui

domingo, 9 de junio de 2013

Oracle crear campo auto-numérico

Para crear un campo auto-numérico en Oracle es decir un campo en el que se valla generando un valor automáticamente es necesario utilizar dos elementos las secuencias y los trigger. Como ejemplo he creado una pequeña tabla que llamado “EMPLEADOS” con la siguiente estructura:

CREATE TABLE PROGRAMADOR.EMPLEADOS
(
  ID_EMP      NUMBER,
  NOMBRE_EMP  VARCHAR2(100)
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;

El campo que vamos a hacer auto-numérico va será el campo “ID_EMP”.

Paso 1: Crear la secuencia

CREATE SEQUENCE PROGRAMADOR.MISECUENCIA
   START WITH 1 -- Por donde empieza a contar la secuencia
   INCREMENT BY 1 -- Incremento
   MINVALUE 1 -- Valor mínimo
   NOCACHE
   NOCYCLE
   NOORDER;

Paso 2: Crear el trigger

CREATE OR REPLACE TRIGGER PROGRAMADOR.TRIGGER_EMPLEADOS -- Nombre del trigger
   BEFORE INSERT -- Cuando se lanzara el trigger. Aquí se apuesto antes de insertar
   ON PROGRAMADOR.EMPLEADOS -- Para asociar a la tabla empleados
   REFERENCING NEW AS New OLD AS Old
   FOR EACH ROW
DECLARE
   tmpVar   NUMBER; -- Variable temporal para recoger el valor de la secuencia
BEGIN
   tmpVar := 0;
  
   -- Obtenemos el valor de la secuencia
   SELECT MISECUENCIA.NEXTVAL INTO tmpVar FROM DUAL;

   :NEW.ID_EMP := tmpVar;

EXCEPTION
   WHEN OTHERS
   THEN
      -- Consider logging the error and then re-raise
      RAISE;
END;

Con esto ya podemos usar nuestro campo auto-numérico para ello vamos a generar dos registros.

INSERT INTO PROGRAMADOR.EMPLEADOS (NOMBRE_EMP)
  VALUES   ('David');
 
INSERT INTO PROGRAMADOR.EMPLEADOS (NOMBRE_EMP)
  VALUES   ('Pepe');


Aquí podemos ver los datos insertados con la generación del campo auto-numérico.


viernes, 31 de mayo de 2013

Instalación de Oracle y Toad

 Paso 1: lo primero que necesitaremos será obtener los dos instaladores para ello tendremos que irnos a sus respectivas paginas tanto para Oracle que sería www.oracle.com y dirigirnos a su apartado de descargar y para el Toad seria www.toadworld.com y también irnos a su apartado de descargar y seleccionar “Toad for Oracle”. Para ambos productos existen versiones gratuitas para descargar que será la que usaremos en este artículo. Les adjuntos algunas capturas de las  web en el momento en que se realizó este artículo.


Oracle


Toad

Paso 2: Ahora comenzaremos con la instalación de Oracle.


Seleccionar el directorio donde queremos crear la instalación.


En esta ventana es donde podemos definir la clave para el usuario SYSTEM que sería la cuenta administrador para la base de datos. Y es obligatoria asignar una contraseña para este usuario.


Y con esto ya tenemos Oracle instalado en nuestra máquina.



Paso 3: Pasamos ahora a instalar nuestro Toad. En mi instalación estoy instalado la comercial pero la exprés es casi igual.


Directorio de instalación.


Realizándose la instalación.


Paso 4: Configurar Toad para obtener acceso a nuestra bases de datos. Para ello ahora iniciamos la base de datos esto lo podemos realizar desde el menú de inicio de Window.


Y después abrimos el Toad e ingresamos el usuario SYSTEM y la contraseña que introducimos en la instalación de Oracle. En el apartado que pone “DataBase” seleccionamos “XE” que es la de por defecto y en “Connect Using” introducimos “XE” también. 


Aconsejo no usar la cuenta (SYS o SYSTEM) para utilizar la base de datos siempre es mejor tener otra cuenta. 

jueves, 3 de enero de 2013

.NET obtener cursor desde Oracle desde un procedimiento almacenado


Vamos a mostrar cómo podemos obtener los datos de un cursor de Oracle a nuestra aplicación .Net llamando desde nuestra aplicación a un procedimiento almacenado de Oracle.

Lo primero será crear el procedimiento almacenado para ello he creado el paquete.


Primero será declarar nuestro nuestro nuevo tipo de dato en el paquete que será un cursor dinámico.

TYPE RstCur IS REF CURSOR;

Ahora la especificación del paquete declararemos el procedimiento. Este procedimiento tendrá como argumento de entrada un nombre y como salida un cursor dinámico. El procedimiento devolverá todos los residentes con el nombre introducido.
La declaración del procedimiento quedaría así:

CREATE OR REPLACE PACKAGE DAVID.PG_RESIDENTES AS
/******************************************************************************
   NAME:       PG_RESIDENTES
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        31/12/2012      David       1. Created this package.
******************************************************************************/
TYPE RstCur IS REF CURSOR;

  PROCEDURE ObtenResidente(pNombre   IN  VARCHAR2,
                           MiCursor  OUT RstCur);

END PG_RESIDENTES;
/


Y  el cuerpo del procedimiento así.

CREATE OR REPLACE PACKAGE BODY DAVID.PG_RESIDENTES AS
/******************************************************************************
   NAME:       PG_RESIDENTES
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        31/12/2012      David       1. Created this package body.
******************************************************************************/

PROCEDURE ObtenResidente(pNombre   IN VARCHAR2,
                         MiCursor  OUT RstCur)
IS
   
BEGIN
  
   OPEN  MiCursor FOR
       SELECT DNI, NOMBRE, APELLIDO1 AS , APELLIDO2
       FROM RESIDENTES
       WHERE  UPPER(RESIDENTES.NOMBRE) = UPPER(pNombre);  

END ObtenResidente;
 

END PG_RESIDENTES;
/

Ahora que ya tenemos el procedimiento almacenado creado vamos a crear una pequeña  aplicación en .Net para llamarlo y mostrar los datos.




Ahora  la lógica del botón buscar.

        private void button1_Click(object sender, EventArgs e)
        {
           
            OracleCommand comando;
            OracleDataAdapter Da;
            DataSet MyDataSet = new DataSet();

            comando = new OracleCommand("PG_RESIDENTES.ObtenResidente", conn);
            comando.CommandType = CommandType.StoredProcedure;

            // Abrimos conexión
            if (conn.State == 0) conn.Open();

            OracleCommandBuilder.DeriveParameters(comando);

            // Le pasamos los parametros
            comando.Parameters[0].Value  = txtNombre.Text; // Nombre
            comando.Parameters[1].Value = null;

            // Ejecutamos y llenamo Ds
            Da = new OracleDataAdapter(comando);
            Da.Fill(MyDataSet);

            // Cerrar conex
            conn.Close();

            // Añadimos los datos al datagridview
            dataGridView1.DataSource = MyDataSet.Tables[0];

        }

Capturas de la aplicación funcionando.



viernes, 17 de febrero de 2012

Oracle Funciones LAG y LEAD


Las funciones LAG y LEAD nos permiten realizar comparaciones con los registros que estén antes y posterior del un registro seleccionado.
LAG nos devuelve el registro anterior y LEAD el posterior.

Supongamos que tenemos la siguiente tabla.

NOMBRE
Pepe
David
Juan
Antonio

Y realizamos la siguiente consulta.

SELECT nombre,  LEAD(nombre) N_POSTERIOR,  LAG(nombre) N_ANTERIOR
FROM NOMBRES

El resultado seria.

N_POSTERIOR         
David                             
Juan                           
Antonio  

N_ANTERIOR

David 
Juan


viernes, 10 de febrero de 2012

Matar sesión de un usuario en Oracle


Con la primera consulta nos mostrara las sesiones que tiene abierta el usuario que hemos introducido después debemos poner su SID y su SERIAL para desconectarlo y matar su sección.


SELECT  SID,  SERIAL#   FROM  SYS.V_$SESSION WHERE  osuser =   'nombre_usuario';

-- 1º el SID(xx), después el SERIAL(yy)

ALTER SYSTEM DISCONNECT SESSION 'xx,yy' IMMEDIATE;
ALTER SYSTEM KILL SESSION 'xx,yy';


Nota:  Desde tu propio usuario no puedes matar tu cuenta, especial agradecimiento a Yauci Santana