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

sábado, 23 de agosto de 2014

Comandos en Gestores de Bases de Datos

  • SQL SERVER
Para modificar el nombre de una tabla se ejecuta la siguiente consulta:
EXEC sp_rename 'nom_tabla_antiguo', 'nom_tabla_nueva'
 
Para modificar el nombre de una columna de una tabla, se ejecuta la siguiente consulta:
EXEC sp_rename 'nom_tabla.nom_columna_antigua', 'nom_columna_nueva'
 
Para consultar los nombres de las columnas en una tabla:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME= "Nombre Tabla" 
  • ORACLE 
Para consultar los nombres de las columnas en una tabla:
DESC "Nombre Tabla"
  • INFORMIX
Para consultar los nombres de las columnas en una tabla: 
DESC "Nombre Tabla"

jueves, 29 de mayo de 2014

Filtrar Datos Por Hora en Oracle

Para filtrar datos de una tabla por la hora unicamente, sin tener en cuanta la fecha, entonces podemos utilizar la siguiente sentencia:

SELECT VISCAIHOR
FROM FAVISCAI
WHERE TO_CHAR(VISCAIHOR,'HH24:MI:SS') = TO_CHAR(?,'HH24:MI:SS')

SELECT VISCAIHOR
FROM FAVISCAI
WHERE TO_CHAR(VISCAIHOR,'HH24:MI:SS') = '17:53:04'

En la primera, el signo de interrogación se cambiaria por un DateTime que llegue como parámetro.
En la segunda, la hora se pasaria como un String, pero se corre el peligro que no se castee bien, por lo cual es mejor utilizar la primera opción.

miércoles, 26 de febrero de 2014

Manejo de Secuencias


  • Consultamos la secuencia de una tabla de oracle

long? sequenceOracle = db.GetAutonumeric("sq_nombreTabla_sec", transaction);


  • Cuando el campo ID es autonumérico, y en uno de los ejemplos, se utiliza la variable @@Identity de SQL Server para saber cuál ese el valor de ese campo al añadir un nuevo dato.

long sequence = long.Parse(db.ExecuteScalar("SELECT @@Identity").ToStringValue());

sábado, 1 de febrero de 2014

COMANDOS ORACLE

  • Consultar la fecha del servidor 
sysdate
  • Modificar una columna
ALTER TABLE NOMTABLE MODIFY NOMCOLUMN VARCHAR2(4000);
  • Todo sobre secuencias 
secuencias
  • Función ASCII()
ASCII() 
  • Creación de claves foraneas  
CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT fk_column FOREIGN KEY (column1, column2, ... column_n) REFERENCES parent_table (column1, column2, ... column_n) );
  • MAX()
Funcion Max  
  • Sensei

jueves, 9 de enero de 2014

Tipos de datos Oracle 11g

El cuadro siguiente resume los tipos de datos en Oracle 11g, esta tabla también es valida para versiones anteriores como Oracle 10g.

Tabla resumen de tipos de datos.


Tipo Dato Descripción
VARCHAR2(size [BYTE | CHAR])
Cadena de caracteres de longitud variable que tiene como  tamaño máximo el valor de size en BYTE o CHAR. El tamaño máximo es de 4000 bytes o caracteres, y la mínima es de 1 byte o un carácter. Se debe especificar el tamaño de para VARCHAR2.
NVARCHAR2(size)
Cadena de caracteres Unicode de longitud variable con size como máximo tamaño de longitud. El número de bytes que pueden ser hasta dos veces el tamaño de codificación AL16UTF16 y tres veces el tamaño de la codificación UTF8. El tamaño máximo está determinado por la definición del juego de caracteres nacional, con un límite máximo de 4000 bytes. Se debe especificar el size de NVARCHAR2.
NUMBER [ (p [, s]) ]
Número con p precisión (parte entera) y s escala (parte decimal). La precisión p puede variar de 1 a 38. La s escala puede variar desde -84 hasta 127. Tanto la precisión y la escala se encuentran en dígitos decimales. Un valor numérico requiere 1 a 22 bytes.
FLOAT [(p)]
Un subtipo del tipo de datos NUMBER con precisión p. Un valor de coma flotante se representa internamente como un NUMBER. La precisión p puede variar desde 1 hasta 126 dígitos binarios. Un valor flotante requiere 1 a 22 bytes.
LONG
Tipo de datos de caracteres de longitud variable de hasta 2 gigabytes, o 231 -1 bytes. Permanece para compatibilidad con versiones anteriores de Oracle.

DATE
Intervalo de fechas válidas del 1 de enero de 4712 antes de Cristo a el 31 de diciembre de 9999. El formato por defecto se determina explícitamente por el parámetro NLS_DATE_FORMAT o implícitamente por el parámetro NLS_TERRITORY. El tamaño es de 7 bytes. Este tipo de datos contiene los campos de fecha y hora AÑO, MES, día, hora, minuto y segundo. No tiene fracciones de segundo o de una zona horaria.
BINARY_FLOAT
Número en coma flotante de 32 bits. Este tipo de datos requiere 4 bytes.
BINARY_DOUBLE
Número en coma flotante de 64 bits. Este tipo de datos se requieren de 8 bytes.
TIMESTAMP [(fractional_seconds_precision)] Año, mes y día como valores de la fecha, así como la hora, minutos y segundos como valores de tiempo, donde fractional_seconds_precision es el número de dígitos en la parte fraccionaria del segundo del campo datetime. Los valores aceptados de fractional_seconds_precision son del 0 al 9. El valor por defecto es 6. El formato por defecto se determina explícitamente por el parámetro NLS_TIMESTAMP_FORMAT o implícitamente por el parámetro NLS_TERRITORY. El tamaño es de 7 o 11 bytes, dependiendo de la precisión. Este tipo de datos contiene los campos datetime AÑO, MES, DIA, HORA, MINUTO y SEGUNDO. Contiene las fracciones de segundo, pero no tiene una zona horaria.
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE
Todos los valores de TIMESTAMP, así como el valor de tiempo de desplazamiento de la zona, donde fractional_seconds_precision es el número de dígitos en la parte fraccionaria del segundo del campo datetime. Los valores aceptados son del 0 al 9. El valor por defecto es 6. El formato por defecto se determina explícitamente por el parámetro NLS_TIMESTAMP_FORMAT o implícitamente por el parámetro NLS_TERRITORY. El tamaño se fija en 13 bytes. Este tipo de datos contiene los campos datetime AÑO, MES, DIA, HORA, MINUTO, SEGUNDO, TIMEZONE_HOUR y TIMEZONE_MINUTE. Cuenta con las fracciones de segundo y una zona horaria explícita.
TIMESTAMP [(fractional_seconds)] WITH LOCAL TIME ZONE
Todos los valores de TIMESTAMP WITH TIME ZONE, con las siguientes excepciones:
* Los datos se normalizan con la zona horaria de base de datos cuando se almacenan en la base de datos.
* Cuando se recuperan los datos, los usuarios ven los datos en la zona de tiempo de la sesión.
El formato por defecto se determina explícitamente por el parámetro NLS_TIMESTAMP_FORMAT o implícitamente por el parámetro NLS_TERRITORY. El tamaño es de 7 o 11 bytes, dependiendo de la precisión.
INTERVAL YEAR [(year_precision)] TO MONTH
Almacena un período de tiempo en años y meses, donde year_precision es el número de dígitos en el campo datetime AÑO. Los valores aceptados son del 0 al 9. El valor predeterminado es 2. El tamaño se fija en 5 bytes.
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds)]
Almacena un período de tiempo en días, horas, minutos y segundos, donde
* day_precision es el número máximo de dígitos en el campo datetime DÍA. Los valores aceptados son del 0 al 9. El valor predeterminado es 2.
* fractional_seconds_precision es el número de dígitos en la parte fraccionaria del campo SEGUNDO. Los valores aceptados son del 0 al 9. El valor por defecto es 6.

El tamaño se fija en 11 bytes.
RAW(size)
Datos binarios sin formato de longitud size. El tamaño máximo es de 2000 bytes. Se debe especificar el tamaño de un valor RAW.
LONG RAW
Datos binarios de tipo RAW de longitud variable hasta 2 gigabytes.
ROWID
Cadena en base 64 que representa la dirección única de una fila en la tabla. Este tipo de datos es principalmente para los valores devueltos por la pseudo columna ROWID.
UROWID [(size)]
Cadena en base 64 que representa la dirección lógica de una fila de una tabla de índice organizado. El tamaño opcional es el tamaño de una columna de tipo UROWID de Oracle. El tamaño máximo y por defecto es de 4000 bytes.
CHAR [(size [BYTE | CHAR])]
Cadena de caracteres de longitud fija de size bytes de tamaño o size de caracteres. El tamaño máximo es de 2000 bytes o caracteres, el tamaño predeterminado y mínimo es de 1 byte.
NCHAR[(size)]
Cadena de caracteres de longitud fija de size caracteres de tamaño de largo. El número de bytes pueden ser hasta dos veces el tamaño de codificación AL16UTF16 y tres veces el tamaño de la codificación UTF8. El tamaño máximo está determinado por la definición del juego de caracteres nacional, con un límite máximo de 2000 bytes. El tamaño predeterminado y mínimo es de un carácter.
CLOB
Un objeto de tipo LOB que contiene caracteres de un byte o multibyte. Son compatibles tanto de ancho fijo y conjuntos de ancho variable de caracteres, con el carácter de base de datos establecida. El tamaño máximo es (4 gigabytes - 1) * (tamaño del bloque de la base de datos).
NCLOB
Un objeto de tipo LOB que contiene caracteres Unicode. Son compatible tanto de ancho fijo y conjuntos de ancho variable de caracteres, con el conjunto base de datos de carácter nacional. El tamaño máximo es (4 gigabytes - 1) * (tamaño del bloque de la base de datos). Guarda los datos nacionales sobre el conjunto de caracteres.
BLOB
Un objeto de tipo LOB binario. El tamaño máximo es (4 gigabytes - 1) * (tamaño del bloque de la base de datos).
BFILE
Contiene un localizador a un archivo binario almacenado fuera de la base de datos. Permite flujo de bytes de E/S para el acceso a LOB externos que residen en el servidor de base de datos. El tamaño máximo es de 4 gigabytes.
Fuente

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

jueves, 28 de febrero de 2013

Configuracion Conexiones Workbench


Para realizar las diferentes configuraciones para el gestor de bases de datos Workbench, realizamos los siguientes pasos dependiendo del motor de bases de datos:

SQL SERVER


  • Para crear una conexión en el Workbench, debemos crear primero una conexión ODBC, donde ingresamos todos los datos correspondientes a la base de datos.
  • Luego en la interface de configuración de las conexiones del Workbench, configuramos la conexión como vemos a continuación:


















Ya con todas estas configuraciones bien realizadas, es muy posible que no existan problemas con la conexión.

ORACLE

[Configuracion]

INFORMIX

[Configuracion]

jueves, 7 de febrero de 2013

Niveles de Aislamiento


A continuación se describen los cuatro posibles niveles de aislamiento basados en bloqueos.

1. READ UNCOMMITTED
Puede recuperar datos modificados pero no confirmados por otras transacciones ( lecturas sucias - dirty reads ). En este nivel se pueden producir todos los efectos secundarios de simultaneidad (lecturas sucias, lecturas no repetibles y lecturas fantasma - ej: entre dos lecturas de un mismo registro en una transacción A, otra transacción B puede modificar dicho registro), pero no hay bloqueos ni versiones de lectura, por lo que se minimiza la sobrecarga. Una operación de lectura (SELECT) no establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, por lo que no será bloqueada por otra transacción que tenga establecido un bloqueo exclusivo por motivo de una operación de escritura. Este nivel de aislamiento ofrece grandes beneficios de rendimiento, pero sólo deberemos utilizarlo en aquellos casos en que la ocurrencia de lecturas sucias (dirty reads) no sea un problema.

2. READ COMMITTED 
Permite que entre dos lecturas de un mismo registro en una transacción A, otra transacción B pueda modificar dicho registro, obteniendose diferentes resultados de la misma lectura. Evita las lecturas sucias (dirty reads), pero por el contrario, permite lecturas no repetibles. Es la opción por defecto en SQL Server 2000 y SQL Server 2005 . Con este nivel de aislamiento, una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo . Sin embargo, dichos bloqueos compartidos finalizarán junto con la propia operación de lectura, de tal modo que entre dos lecturas cabe la posibilidad de que otra transacción realice una operación de escritura (ej: UPDATE), en cuyo caso, la segunda lectura obtendrá datos distintos a la primera lectura (lecturas no repetibles).

3. REPEATABLE READ 
Evita que entre dos lecturas de un mismo registro en una transacción A, otra transacción B pueda modificar dicho registro, con el efecto de que en la segunda lectura de la transacción A se obtuviera un dato diferente. De este modo, ambas lecturas serían iguales (lecturas repetidas). Para ello, una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, y los mantendrá hasta el final de la transacción , garantizando así que no se produce lecturas no repetibles (non repeatable reads) . Mayor consistencia en la transacción, mediante mayores recursos y bloqueos ( se evitan los problemas de las lecturas sucias y de las lecturas no repetibles , pagando el precio de necesidad de mayores recursos). Sin embargo, este modo de aislamiento no evita las lecturas fantasma , es decir, una transacción podría ejecutar una consulta sobre un rango de filas (ej: 100 filas) y de forma simultánea otra transacción podría realizar un inserción de una o varias filas sobre el mismo rango.

4. SERIALIZABLE 
Garantiza que una transacción recuperará exactamente los mismos datos cada vez que repita una operación de lectura (es decir, la misma sentencia SELECT con la misma cláusula WHERE devolverá el mismo número de filas, luego no se podrán insertar filas nuevas en el rango cubierto por la WHERE, etc. - se evitarán las lecturas fantasma ), aunque para ello aplicará un nivel de bloqueo que puede afectar a los demás usuarios en los sistemas multiusuario (realizará un bloqueo de un rango de índice - conforme a la cláusula WHERE - y si no es posible bloqueará toda la tabla). Evita los problemas de las lecturas sucias (dirty reads), de las lecturas no repetibles (non repeatable reads), y de las lecturas fantasma (phantom reads).

Saber más: Niveles de Aislamiento y bloqueos

martes, 2 de octubre de 2012

Seleccionar un rango de datos

INFORMIX
En informix para obtener los primeros 10 registros de una consulta, debemos usar FIRST.
Ejemplo: Select FIRST 10 columna1, columna2 from facturas.

SQL Server
En SQL el Top
Ejemplo: Select TOP(10 ) columna1, columna2 from facturas.

ORACLE
En Oracle es rownum.
Ejemplo: Select * from nomTabla where rownum <= 1

jueves, 30 de agosto de 2012

Usuarios y privilegios en Oracle

1. Crear Usuarios y asignar privilegios en Oracle
El siguiente es un resumen de algunas consideraciones al momento de crear un usuario o cuenta en Oracle, y los privilegios y roles que le podemos asignar.
  • El nombre de usuario no debe superar 30 caracteres, no debe tener caracteres especiales y debe iniciar con una letra.
  • Un método de autentificación. El mas común es una clave o password, pero Oracle 10g soporta otros métodos (como biometric, certificado y autentificación por medio de token).
  • Un Tablespace default, el cual es donde el usuario va a poder crear sus objetos por defecto, sin embargo, esto no significa que pueda crear objetos, o que tenga una cuota de espacio. Estos permisos se asignan de forma separada, salvo si utiliza el privilegio RESOURCE el que asigna una quota unlimited, incluso en el Tablespace SYSTEM!  Sin embargo si esto ocurre, ud. puede posteriormente mover los objetos creados en  el SYSTEM a otro Tablespace.
  • Un Tablespace temporal, donde el usuario crea sus objetos temporales y hace los sort u ordenamientos.
  • Un perfil o profile de usuario, que son las restricciones que puede tener su cuenta (opcional).
Por ejemplo, conectado como el usuario SYS, creamos un usuario y su clave asi:
SQL> CREATE USER ahernandez IDENTIFIED BY ahz
         DEFAULT TABLESPACE users;
Si no se indica un Tablespace por defecto, el usuario toma el que está definido en la BD (generalmente el SYSTEM). Para modificar el Tablespace default de un usuario se hace de la siguiente manera:
SQL> ALTER USER jperez DEFAULT TABLESPACE datos;
También podemos asignar a los usuarios un Tablespace temporal donde se almacenan operaciones de ordenamiento. Estas incluyen las cláusulas ORDER BY, GROUP BY, SELECT DISTINCT, MERGE JOIN, o CREATE INDEX (también es utilizado cuando se crean Tablas temporales).
SQL> CREATE USER jperez IDENTIFIED BY jpz
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
Adicionalmente,  a cada usuario se puede asignar a un profile o perfil, que tiene dos propósitos principalmente:
  • Limita el uso de recursos,  lo que es recomendable, por ejemplo en ambientes de Desarrollo
  • Garantiza y refuerza reglas de Seguridad a nivel de cuentas
Ejemplos, cuando se crea el usuario o asignar un perfil existente:
SQL> CREATE USER jperez IDENTIFIED BY jpz
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
PROFILE resource_profile;
SQL> ALTER USER jperez
PROFILE perfil_desa;
2. Eliminar un Usuario de la Base de Datos
Para eliminar un usuario de la BD se hace uso de la clausula DROP USER y opcionalmente se puede utilizar CASCADE, para decirle que también elimine todos los objetos creados por ese usuario.
SQL> DROP USER jperez CASCADE;
3. Modificar cuentas de Usuarios
Para modificar un usuario creado, por ejemplo cambiar su clave, tenemos la sintáxis:
SQL> ALTER USER NOMBRE_USUARIO
 IDENTIFIED BY CLAVE_ACCESO
[DEFAULT TABLESPACE ESPACIO_TABLA]
[TEMPORARY TABLESPACE ESPACIO_TABLA]
[QUOTA {ENTERO {K | M } | UNLIMITED } ON ESPACIO_TABLA
[PROFILE PERFIL];
4. Privilegios de Sistema y de Objetos
En Oracle existen dos tipos de privilegios de usuario.
4.1 System: Que permite al usuario hacer ciertas tareas sobre la BD, como por ejemplo crear un Tablespace. Estos permisos son otorgados por el administrador o por alguien que haya recibido el permiso para administrar ese tipo de privilegio. Existen como 100 tipos distintos de privilegios de este tipo.
En general los permisos de sistema, permiten ejecutar comandos del tipo DDL (Data definition Language), como CREATE, ALTER y DROP o del tipo DML (Data Manipulation Language). Oracle 10g tiene mas de 170 privilegios de sistema los cuales pueden ser vistos consultando la vista: SYSTEM_PRIVILEGE_MAP
Entre todos los privilegios de sistema que existen, hay dos que son los importantes: SYSDBA y SYSOPER. Estos son dados a otros usuarios que serán administradores de base de datos.
Para otorgar varios permisos a la vez, se hace de la siguiente manera:
SQL> GRANT CREATE USER, ALTER USER, DROP USER TO ahernandez;
4.2 Object: Este tipo de permiso le permite al usuario realizar ciertas acciones en objetos de la BD, como una Tabla, Vista, un Procedure o Función, etc.  Si a un usuario no se le dan estos permisos sólo puede acceder a sus propios objetos (véase USER_OBJECTS). Este tipo de permisos los da el owner o dueño del objeto, el administrador o alguien que haya recibido este permiso explícitamente (con Grant Option).
Por ejemplo, para otorgar permisos a una tabla Ventas para un usuario particular:
SQL> GRANT SELECT,INSERT,UPDATE, ON analista.venta TO jperez;
Adicionalmente, podemos restringir los DML a una columna de la tabla mencionada. Si quisieramos que este usuario pueda dar permisos sobre la tabla Factura a otros usuarios, utilizamos la cláusula WITH GRANT OPTION. Ejemplo:
SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON venta TO mgarcia WITH GRANT OPTION;
5. Asignar cuotas a Usuarios
Por defecto ningun usuario tiene cuota en los Tablespaces y se tienen tres opciones para poder proveer a un usuario de una quota:
5.1Sin limite, que permite al usuario usar todo el espacio disponible de un Tablespace.
5.2 Por medio de un valor, que puede ser en kilobytes o megabytes que el usuario puede usar. Este valor puede ser mayor o nenor que el tamaño del Tablespace asignado a él.
5.3 Por medio del privilegio UNLIMITED TABLESPACE, se tiene prioridad sobre cualquier cuota dada en un Tablespace por lo que tienen disponibilidad de todo el espacio incluyendo en SYSTEM y SYSAUX.
No se recomienda dar cuotas a los usuarios en los Tablespaces SYSTEM y SYSAUX, pues tipicamente sólo los usuarios SYS y SYSTEM pueden crear objetos en éstos. Tampoco dar cuotas en los Tablespaces Temporal o del tipo Undo.
6. Roles
Finalmente los Roles, que son simplemente un conjunto de privilegios que se pueden otorgar a un usuario o a otro Rol. De esa forma se simplifica el trabajo del DBA en esta tarea.
Por default cuando creamos un usuario desde el Enterprise Manager se le asigna el permiso de connect, lo que permite al usuario conectarse a la BD y crear sus propios objetos en su propio esquema. De otra manera, debemos asignarlos en forma manual.
Para crear un Rol y asignarlo a un usuario se hace de la siguiente manera:
SQL> CREATE ROLE appl_dba;
Opcionalmente, se puede asignar una clave al Rol:
SQL> SET ROLE appl_dba IDENTIFIED BY app_pwd;
Para asignar este Rol a un usuario:
SQL> GRANT appl_dba TO jperez;
Otro uso común de los roles es asignarles privilegios a nivel de Objetos, por ejemplo en una Tabla de Facturas en donde sólo queremos que se puedan hacer Querys e Inserts:
SQL> CREATE ROLE consulta;
SQL> GRANT SELECT,INSERT on analista.factura TO consulta;
Y finalmente asignamos ese rol con este “perfil” a distintos usuarios finales:
SQL> GRANT consulta TO ahernandez;
Nota: Existen algunos roles predefinidos, tales como:
CONNECT, CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, CREATE CLUSTER,
ALTER SESSION, RESOURCE, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, CREATE TYPE, CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR SCHEDULER, CREATE ANY JOB, CREATE JOB, EXECUTE ANY CLASS, EXECUTE ANY PROGRAM,
MANAGE SCHEDULER, etc.
DBA: Tiene la mayoría de los privilegios, no es recomendable asignarlo a usuarios que no son administradores.
SELECT_CATALOG_ROLE: No tiene privilegios de sistema, pero tiene cerca de 1600 privilegios de objeto.
Para consultar los roles definidos y los privilegios otorgados a través de ellos, utilize las vistas:
SQL> select * from DBA_ROLES;
SQL> select * from DBA_ROLE_PRIVS order by GRANTEE;
Etiquetas: ,

lunes, 23 de julio de 2012

Función para concatenar campos


Algunas veces es necesario combinar en forma conjunta (concatenar) los resultados de varios campos diferentes.
Cada base de datos brinda una forma para realizar esto:
 Informix: ||
Oracle: CONCAT(), ||
 SQL Server: +
 MySQL: CONCAT()
La sintaxis para CONCAT() es la siguiente: CONCAT(cad1, cad2, cad3, ...): Concatenar cad1, cad2, cad3, y cualquier otra cadena juntas.
Por favor note que la función CONCAT() de Oracle sólo permite dos argumentos – sólo dos cadenas pueden colocarse juntas al mismo tiempo utilizando esta función.
Sin embargo, es posible concatenar más de dos cadenas al mismo tiempo en Oracle utilizando '||'. Observemos algunos ejemplos.
Supongamos que tenemos la siguiente tabla:
Tabla Geography region_name store_name East Boston East New York West Los Angeles West San Diego

 Ejemplo 1:
 MySQL/Oracle: SELECT CONCAT(region_name,store_name) FROM Geography WHERE store_name = 'Boston';
 Resultado : 'EastBoston'

 Ejemplo 2:
Oracle: SELECT region_name || ' ' || store_name FROM Geography WHERE store_name = 'Boston'; Resultado : 'East Boston'

 Ejemplo 3: SQL Server: SELECT region_name + ' ' + store_name FROM Geography WHERE store_name = 'Boston';
 Resultado : 'East Boston'

FORMATO FECHA EN ORACLE


Formatos de Fecha

La función TO_CHAR(,) traduce una fecha/hora (o parte de ella) a una cadena de caracteres, y TO_DATE(,) transforma una cadena de caracteres a una fecha, hora o combinación fecha/hora. Por ejemplo, TO_DATE('02/08/2002', 'DD/MM/YYYY') daría la fecha 2 de agosto de 2002. Si suponemos que un atributo FECHA almacena esa misma fecha a las 3 de la tarde, TO_CHAR(FECHA, 'DD-MON-YYYY HH:MI AM') devolvería el string 02-AGO-2002 03:00 PM. El formato es una cadena de caracteres en la que se indica el formato siguiendo las claves que se muestran en la Tabla 2.1. Esta tabla no incluye absolutamente todos los formatos, pero sí un buen número de ellos, que deberían ser más que suficientes para un uso normal. Tabla 2.1: Formatos de fecha en Oracle Siglos y años CC Siglo SCC Siglo. Si es AC (Antes de Cristo), lleva un signo YYYY Año, formato de 4 dígitos SYYY Año, formato de 4 dígitos. Si es AC lleva un signo YY Año, formato de 2 dígitos YEAR Año, escrito en letras y en inglés (por ejemplo, 'TWO THOUSAND TWO') SYEAR Ídem, pero si es AC lleva el signo BC Antes o Después de Cristo (AC o DC) para usar con los anteriores, por ejemplo YYYY BC Meses Q Trimestre: Ene-Mar=1, Abr-Jun=2, Jul-Sep=3, Oct-Dic=4 MM Número de mes (1-12) RM Número de mes en números romanos (I-XII) MONTH Nombre del mes completo rellenado con espacios hasta 10 espacios (SEPTIEMBRE) FMMONTH Nombre del mes completo, sin espacios adicionales MON Tres primeras letras del mes: ENE, FEB,... Semanas WW Semana del año (1-52) W Semana del mes (1-5) Días DDD Día del año (1-366) DD Día del mes (1-31) D Día de la semana (1-7) DAY Nombre del día de la semana rellenado a 9 espacios (MIÉRCOLES) FMDAY Nombre del día de la semana, sin espacios DY Tres primeras letras del nombre del día de la semana DDTH Día (ordinal): 7TH DDSPTH Día ordinal en palabra, en inglés: SEVENTH horas HH Hora del día (1-12) HH12 Hora del día (1-12) HH24 Hora del día (1-24) SPHH Hora del día, en palabra, inglés: SEVEN AM am o pm, para usar con HH, como 'HH:MI am' PM am o pm A.M. a.m. o p.m. P.M. a.m. o p.m. Minutos y segundos MI Minutos (0-59) SS Segundos (0-59) SSSS Segundos después de medianoche (0-86399) Además de estas palabras clave, el formato puede incluir espacios y los signos de puntuación -/,.;:. Cualquier otro carácter debe ir "entre comillas dobles". Finalmente, se debe indicar que los formatos de fecha que indican un periodo en palabras, como el nombre del mes o del día de la semana, seguirán el lenguaje de la instalación (de Oracle o del sistema operativo), por lo que no se garantiza que sea en español. Además, el uso de mayúsculas o minúsculas es significativo. Así, para el mes de agosto, MONTH produce AGOSTO , Month, Agosto , y month, agosto , y para el lunes, DY produce LUN y fmday, lunes (o su equivalente en inglés si así está configurado el idioma). Por ejemplo: SQL> select ename, 2 to_char(hiredate,'dd "de " fmmonth " de " yyyy') AS "Fecha de contrato" 3* from emp ENAME Fecha de contrato ---------- --------------------------- SMITH 17 de diciembre de 1980 ALLEN 20 de febrero de 1981 WARD 22 de febrero de 1981 JONES 02 de abril de 1981 MARTIN 28 de septiembre de 1981 BLAKE 01 de mayo de 1981 CLARK 09 de junio de 1981 SCOTT 09 de diciembre de 1982 KING 17 de noviembre de 1981 TURNER 08 de septiembre de 1981 ADAMS 12 de enero de 1983 JAMES 03 de diciembre de 1981 FORD 03 de diciembre de 1981 MILLER 23 de enero de 1982 14 filas seleccionadas.