Ejemplo: Crear una vista de base de datos en Oracle con el comando sdetable

Complejidad: Principiante Requisitos de datos: Usar datos propios

Puede utilizar el comando sdetable para crear una vista en una geodatabase de Oracle. Al hacer esto se registra automáticamente la vista con ArcSDE.

El ejemplo de este tema muestra cómo se puede utilizar una vista creada con sdetable para restringir el acceso de usuario a datos específicos. El ejemplo se basa en una tabla con la siguiente definición:

CREATE TABLE employees (   emp_id      number(38) unique not null,   name        varchar2(32),   department  number not null,   hire_date   date not null);

Tenga en cuenta que la tabla contiene una columna de números no nulos que se puede utilizar como un Id. de fila de ArcSDE.

Cree una vista con el comando sdetable

Supongamos que desea que el administrador del departamento 101 vea todas las columnas de la tabla de empleados pero sólo las filas para los empleados en el departamento 101. Utilice sdetable para crear una vista con todas las filas para las que el número de departamento es 101. La opción –w especifica la cláusula WHERE de la consulta almacenada con la definición de vista.

sdetable –o create_view –T view_dept_101 –t employees  –c 'emp_id,name,department,hire_date' -w "where department = 101"  –u gdb –p gdb.bdg –i sde:oracle11g:ora1 -s myodbserver  Attribute        Administration Utility __________________________________ Successfully created view view_dept_101.
SugerenciaSugerencia:

Para obtener más información acerca del comando sdetable, consulte la Referencia sobre el comando de administración.

Después puede consultar ALL_VIEWS para ver una descripción de view_dept_101.

set lines 60 set pages 10000 set long 2000 column text format a60 wrapped;  SELECT view_name, text_length, text  FROM all_views WHERE owner = 'GDB' and view_name = 'VIEW_DEPT_101';

VIEW_NAME

TEXT_LENGTH

TEXT

VIEW_DEPT_101

112

SELECT "EMP_ID","NAME","DEPARTMENT","HIRE_DATE",  FROM GDB.EMPLOYEES  WHERE department = 101

En este ejemplo, ArcSDE agregó el nombre del propietario al nombre de la tabla en la consulta. Si crea una vista propia con SQL, esto no se lleva a cabo automáticamente.

Observe que los nombres de la vista y el propietario cambian a mayúscula antes de almacenarse en ALL_VIEWS. Esto se lleva a cabo con Oracle, no ArcSDE. Por lo tanto, al consultar estos valores de texto específicos, debe escribirlos en mayúscula.

PrecauciónPrecaución:

Algunos usuarios crean vistas registradas con sdetable –o create_view y alteran la definición de la vista mediante SQL. Esto se lleva a cabo para evitar una compleja sintaxis de línea de comandos sdetable –o create_view (en especial la opción –c) o para incluir una definición de vista más compleja o extendida, como la que utiliza conexiones a bases de datos externas. Aunque alterar una vista puede resolver algunos problemas, también es posible crear una vista que no funcione bien con ArcSDE o los clientes de ArcSDE como ArcGIS Desktop.

Otorgar privilegios en la vista

El propietario de la vista puede otorgar privilegios en la vista a usuarios específicos sin tener que otorgarle a estos usuarios acceso a la tabla base (empleados). En este ejemplo, al usuario mgr100 se le otorgan privilegios selectos en la vista, view_dept_101:

SQL> GRANT SELECT ON view_dept_101 TO mgr100;  Grant succeeded.
NotaNota:

En este ejemplo, el propietario de la tabla y el propietario de la vista son el mismo usuario. Si fueran diferentes, el propietario de la tabla debería otorgarle privilegios de selección en la tabla al propietario de la vista, además de la capacidad de otorgar selección a otros usuarios. Si el privilegio se otorga mediante SQL, incluya WITH GRANT OPTION en el estamento. Si el privilegio se otorga mediante el comando sdetable con la operación de otorgamiento, se debe especificar la opción (–I) heredada.

Probar privilegios

Inicie sesión como mgr100 y seleccione registros en view_dept_101.

conn mgr100/mgr100 Connected. SQL> SELECT * FROM gdb.view_dept_101;  EMP_ID   NAME       DEPT     HIRE_DATE  29       YAN WU     101      04/15/2002  67       LEE VAN    101      11/01/2004  78       SUE CHO    101      05/31/2005  105      DAN HO     101      10/01/2006  111      ANN ANG    101      12/15/2006  135      BILL BO    101      10/15/2007

Como se esperaba, sólo se devuelven los registros para los empleados en el departamento 101.

Las vistas existen como objetos de esquema, independientemente de las tablas que las completan. En la siguiente consulta, el usuario mgr100 no tiene acceso a la tabla, empleados, de modo que para mgr100 la tabla de empleados no existe.

SQL> SELECT * FROM gdb.employees; select * from gdb.employees                   * ERROR at line 1: ORA-00942: table or view does not exist

3/6/2012