Cómo definir una llave primaria (primary key) en una tabla existente en Oracle.

Supongamos que tenemos una tabla sin llave primaria y todos sus campos fueron definidos para aceptar valores nulos. El comando CREATE TABLE de dicha tabla se ejecutó así:

Una llave primaria o PRIMARY KEY puede estar formada por uno o varios campos, cuyos valores permiten identificar un sólo registro en la tabla. Luego entonces el campo que vayamos a escoger no debe permitir valores nulos (sin valor) ni repetidos. Identificamos que los valores del campo CVE_ENT son irrepetibles y que identifican a un sólo registro en la tabla.

Para modificar las propiedades de este campo y  que este no permita nulos de ahora en adelante, ejecutamos la siguiente sentencia:

Alteramos la tabla ENTIDAD modificando el campo CEV_ENT especificándole la restricción NOT NULL. Una vez ejecutada la sentencia, el campo ya no permitirá valores nulos.

Una vez logrado esto, procedemos a definir el campo CEVE_ENT como llave primaria de la tabla de esta forma:

Alteramos la tabla ENTIDAD agregando la restricción llave primaria (PRIMARY KEY) llamada ENTIDAD_PK conformada por el campo CVE_ENT.

Cabe aclarar que la restricción PRIMARY KEY, en Oracle, lleva implícito el no aceptar valores nulos en los campos que la conforman, sin embargo es buena práctica especificar explícitamente antes que el campo o campos que conformarán dicha llave primaria no acepten nulos con la sentencia ALTER que vimos anteriormente, ya que algunos motores de bases de datos así lo requieren.

¡Hasta la próxima!

 

 

 

Como conectar a una base de datos Oracle 12c desde una aplicación .Net sin usar archivo tsnames.ora.

Enseguida les comparto el código en ¢# (c sharp) para hacer una conexión a una base de datos Oracle 12c desde una aplicación .Net sin usar archivo tsnames.ora externo que defina la conexión.

Antes de ejecutar el código sobra decir que debes contar con los controladores .Net (drives)  de conexión a Oracle 12c instalados en la máquina de desarrollo y el proyecto debe hacer referencia a la clase Oracle.ManagedDataAccess.

No olvides cambiar los valores de HOST (nombre o ip de la computadora donde está instalada la base de datos), PORT (puerto de conexión), SERVICE_NAME (nombre de la instancia de la base de datos Oracle), User Id (usuario) y Password (contraseña), por los valores correctos de tu base de datos.

¡Hasta la próxima!

Formatear campo fecha con sql en Oracle con la función to_char().

Varias formas de mostrar un campo fecha con la función to_char()  de sql en Oracle; asumimos en los ejemplos siguientes, que  el campo s.CREATED  es un campo de tipo date de una tabla cualquiera; abajo de cada uno se muestra la salida que obtendríamos para un mismo valor del campo aplicando la función to_char():

¡Espero y les sea útil!

¡No olviden visitar a los anunciantes!¡Hasta la próxima!

Fallo con la variable PATH al comprobar requisitos al instalar Oracle 12c.

Si al instalar Oracle 12c en Windows 10 te muestra un estado fallido relacionado con la variable PATH al momento de comprobar requisitos del sistema y, según el mensaje de verificación dice que se debe a la longitud de la variable PATH, puede que no sea la longitud de dicha variable el problema.

Al mostrar detalles del mensaje decía esto: “PRVF-3919 : Failed to retrieve value of environment variable “PATH”” y sugiere que pueden ser errores de privilegios o permisos como muestra la siguiente imagen:

Si revisas tu variable PATH y encuentras que su valor no está demasiado grande (más de 1024 caracteres) entonces puedes sin problemas indicarle al instalador que ignore el error activando  el cuadro de selección “Ignorar Todo” y proceder con la instalación. Así lo hice y Oracle está funcionando correctamente. Al parecer es un bug del instalador con la versión de Windows 10.

Que éste artículo les sea útil. ¡Hasta la próxima!

 

 

Instalar Oracle Sql Developer en Windows

Oracle Sql Developer es un programa gratuito creado por Oracle en lenguaje de programación Java para desarrollar y administrar su base de datos. El programa se puede descargar gratuitamente del sitio de Oracle.

Para descargar la versión más reciente del programa, abre la siguiente dirección en tu navegador preferido: http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html.

Aparecerá la siguiente página:

Da clic en el botón Download para proceder a descargar el programa. Aparecerá la página de descargas:

Selecciona la opción Accept License Agreement para aceptar las condiciones de licencia y de clic en la liga Download  que se activa (marcada con una flecha en la imagen siguiente) a la versión correspondiente a tu equipo (si tienes equipo con Windows de 64 bits selecciona Windows 64-bit with JDK incluided, esta versión del instalador, instalará tanto el programa como la versión necesaria de Java).

Si tienes Windows de 32 bits, será necesario descargar e instalar el programa JDK 8 (Java 8), antes de proceder a la instalación de Sql Developer. Si es el caso, ve a la sitio de descargas de Java dando clic en la liga JDK 8 (ver la imagen anterior)  o da clic aquí. Acepta la licencia y descarga la versión más reciente del producto llamado Windows x86. Una vez descargado, sigue las indicaciones que te mostrará el instalador.

Una vez que diste clic en la liga de descarga del SQL Developer, se te pedirá los datos de inicio de sesión en Oracle:

Si aún no has creado una cuenta en Oracle, da clic en Crear una cuenta. En caso contrario, proporciona el usuario y la contraseña y oprime Iniciar sesión. La descarga de de SQL Developer se iniciará.

Se descargará un archivo de tipo zip (comprimido), cuyo nombre pude variar al mostrado de acuerdo a la versión descargada,  el que contiene la carpeta de la aplicación comprimida:

El archivo de tipo zip no contiene un instalador de windows, contiene una carpeta llamada sqldeveloper que deberá ser extraída junto con su contenido en el lugar de tu preferencia:

En mi caso la descomprimí y copié al directorio  C:\Herramientas que creé previamenteNavegamos dentro de la carpeta sqldeveloper y ejecutamos el archivo sqldeveloper.exe dando doble clic sobre el.

Nos preguntará si deseamos importar la configuración de algún Sql Developer anterior, selecciona de acuerdo si quieres importar la configuración de una versión anterior o no. La imagen muestra que encontró una versión antigua, pero le diré que no me importe la configuración:

Nos aparecerá la pantalla principal de SQL Developer y nos preguntará si queremos estar enviando datos a Oracle para seguimiento de uso. La respuesta dependerá de ti. En mi caso le diré que no deseo enviar datos por lo que quitaré la opción Permitir informes de uso automáticos a Oracle y oprimiré el botón Aceptar.

¡Listo! Nos mostrará la pantalla principal de SQL Developer:

En artículos posteriores veremos el uso de este programa.

¿Te fue útil este artículo? Por favor visita los anuncios de los patrocinadores para seguir publicando más artículos como estos. ¿Alguna observación o sugerencia? Utiliza los comentarios.

¡Hasta pronto!

Mostrar el nombre del mes actual en español en Oracle usando la función to_char y sysdate.

¿Como forzar que la función to_char de Oracle regrese el nombre del mes en español? Cuando el sistema operativo de un equipo cliente, donde se ejecutan sentencias Sql de Oracle que obtienen el nombre del mes está en otro lenguaje que no sea español, el nombre del mes lo regresa en el idioma por defecto. Por ejemplo, si ejecutamos la sentencia de la siguiente forma en un equipo cliente donde su lenguaje es inglés:

Nos regresaría el nombre del mes en inglés como se muestra.

Si queremos forzar que regrese el nombre del mes en otro lenguaje, por ejemplo español, utilizaríamos esta forma:

Ahora el nombre del mes lo regresa en el lenguaje especificado.

O en lenguaje italiano sería:

¿Te fue útil el artículo? Por favor visita los patrocinadores para seguir publicando artículos como estos. ¿Tienes alguna duda informática? Déjame tu comentario.

¡Saludos!

Listar tablas desde SQL en Oracle, Postgresql y MySQL

Una vez conectados a la base de datos desde un cliente SQL, para listar las tablas a las que tenemos acceso en Oracle sería:

En Postgresql:

En la sentencia anterior sustituimos ‘public‘ por el nombre del esquema correspondiente si se tiene más esquemas en la base de datos.

En MySQL:

Donde nombre_base_de_datos se sustituye por el nombre de la base de datos a la que estamos conectados.

¡Saludos!

Obtener lista de valores separados por comas con sql en Oracle 10g

Si queremos obtener  una lista de valores separados por comas, cuyos valores representen el contenido de una columna de varias filas, en Oracle 10g, podemos usar la función PL/SQL WMSYS.WM_CONCAT.

Veamos un ejemplo más ilustrativo:

Nos daría como resultado:

Una sola fila con la lista de los nombres de empleados separados por comas.

Podemos también mostrar los resultados agrupados por otro campo, por ejemplo el número de departamento:

Por cada grupo, en esta caso número de departamento, crea una lista de los empleados pertenecientes a cada uno.

Hay que comentar que Oracle no recomienda el uso de esta función porque no está soportada por ellos. De hecho en la versión 12g está fución ha sido eliminada. A partir de la versión 11g fue reemplazada por LISTAGG la cual veremos en otra entrada.

Es posible también lograr el listado de  nombres por departamento en Oracle 10g  sin utilizar la función WMSYS.WM_CONCAT. Utilizando las sentencias analíticas de Oracle que se muestran aquí.

¡Hasta la próxima!

Localizar una cadena de caracteres dentro de un campo en Oracle

A veces nos vemos en la necesidad de saber si en el valor de un campo de una tabla en Oracle se encuentra cierto caracter o secuencia de caracteres.

Oracle cuenta con la función INSTR para llevar a cabo esta tarea. La función regresa un número entero que indica la posición dentro de la cadena de caracteres que contiene el campo de el o la secuencia de caracteres buscados. Por ejemplo la siguiente instrucción:

Mostrará el nombre y la posición de la cadena RK dentro del nombre:

Como se muestra en los resultados, solo la fila con el valor de CLARK en la columna Nombre tiene el valor de que representa la posición inicial de la cadena RK en dicha columna.

¿Que representan los 4 valores o parámetros en la función INSTR? El primer parámetro es la cadena de caracteres donde se va a hacer la búsqueda, en este caso la columna ename de la tabla empEl segundo parámetro es la cadena que buscamos, en este caso RK. El tercer parámetro indica a partir de cual caracter queremos hacer la búsqueda, en este caso desde el caracter 1. El cuarto y último parámetro de la función indica que número de ocurrencia queremos encontrar, en este caso la primera ocurrencia; por ejemplo si quisiéramos encontrar la segunda ocurrencia de la cadena R en el Nombre sería:

Lo que nos arrojaría los siguientes resultados:

Como se puede observar, sólo en el nombre TURNER encontró una segunda ocurrencia de la cadena en la posición 6. El nombre CLARK, sólo tiene una ocurrencia de R por lo que el resultad arroja 0, es decir, no encontrado.

Ahora, ¿y si ponemos un número negativo en el parámetro que indica a partir de que caracter queremos buscar? Así:

Le estamos indicando que la búsqueda la haga de derecha a izquierda (de revesa) comenzando por la primera posición.  Esto nos daría el resultado siguiente:

Como podemos observar, ahora la consulta nos muestra el nombre TURNER y la posición de R en 3, que es la segunda ocurrencia de la R en TURNER pero de derecha a izquierda a partir de la posición 1 (contando de derecha a izquierda)Si le indicamos un -2 en la posición desde dónde queremos la búsqueda, buscará desde el penúltimo caracter hacia la izquierda, lo que nos dará un resultado de 0 en todas las filas, porque no hay ningún nombre que cumpla con la condición:

¿Alguna duda? Deja tu comentario.

¡Hasta la próxima!

 

Crear una tabla a partir de una consulta en Oracle

A veces necesitamos crear una nueva tabla con un subconjunto de datos de otra tabla para ya sea obtener reportes o analizar datos. El proceso podría ser, primero definir los campos y crear la tabla que va a contener los datos necesitados y luego insertar los datos por medio de una consulta (query) hecha a la tabla original.

Podemos ahorrarnos el paso de la definición de los campos y creación de la tabla utilizando la sentencia sql CREATE TABLE .. AS. La sentencia define los campos en base a los número y tipo de datos devueltos por la consulta.

Por ejemplo, tenemos una tabla llamada EMP que contiene información de los empleados de una empresa:

Con la siguiente estructura:

Y queremos crear una tabla que contenga sólo los campos EMPNO, ENAME y SAL y los datos de los empleados del departamento (DEPTNO) número 20. Para ello ejecutaríamos la siguiente sentencia SQL:

La sentencia anterior nos crea la tabla llamada departamento20 y con los datos de los empleados del departamento (DEPTNO) 20 como muestra la siguiente imagen:

Con la estructura que se muestra enseguida:

¡Nos vemos a la próxima!