Vous pouvez utiliser SQL pour créer une vue sur des tables et des classes d’entités dans une géodatabase d’entreprise afin de restreindre les colonnes et les enregistrements disponibles pour l’affichage des utilisateurs ou définir une vue pour joindre les informations provenant de deux tables ou d’une classe d’entités et d’une table. Lorsque vous incluez la colonne spatiale dans la définition de la vue, les utilisateurs de la vue peuvent visualiser les entités dans une carte dans un client ArcGIS Desktop.
Les exemples de cette rubrique présentent comment créer des vues dans une base de données Oracle. Une vue limite l'accès utilisateur aux colonnes spécifiques. L’autre vue présente le contenu de deux tables différentes. Les exemples sont basés sur les tables avec les définitions suivantes :
Définition de table pour les employés
CREATE TABLE employees (
emp_id number(38) unique not null,
name varchar2(32),
department number not null,
hire_date date not null
);
Définition de table pour les régions
CREATE TABLE employees ( objectid number(38) unique not null, reg_id number(38) unique not null, emp_id number(38) not null, rname nvarchar(32), region st_geometry
);
Accorder des privilèges sur les tables
Si l’utilisateur qui crée la vue n’est pas le propriétaire de la table ou des tables sur lesquelles la vue repose, le propriétaire des tables doit au moins accorder au créateur de la vue les privilèges nécessaires pour réaliser des sélections dans la table. Si le propriétaire de la vue doit accorder des privilèges sur la vue à d'autres utilisateurs, le propriétaire de la table doit accorder au propriétaire de la vue la possibilité d'accorder des privilèges sur la table à d'autres utilisateurs.
Dans cet exemple, les tables sur lesquelles reposent les vues (employés et régions) sont la propriété de l’utilisateur gdb. L’utilisateur qui crée les vues est l’utilisateur rocket. En outre, l’utilisateur rocket accorde les privilèges sur les vues d’autres utilisateurs. Par conséquent, l’utilisateur gdb doit accorder à l’utilisateur rocket le privilège de sélectionner à partir des tables pour les employés et les régions et inclure l’option WITH GRANT OPTION de telle sorte que l’utilisateur rocket puisse accorder aux autres utilisateurs les privilèges SELECT sur les vues.
conn gdb/gdb.bdg
GRANT SELECT
ON gdb.employees
TO rocket WITH GRANT OPTION;
GRANT SELECT
ON gdb.regions
TO rocket WITH GRANT OPTION;
Créer une vue pour limiter l’accès
Dans cet exemple, l’utilisateur rocket crée une vue (view_dept_201) sur la table des employés afin de limiter l’accès aux seules lignes où le département a la valeur 201 :
CREATE VIEW view_dept_201
AS (SELECT emp_id,name,department,hire_date)
FROM gdb.employees
WHERE department = 201;
Créer une vue pour joindre deux tables
Dans cet exemple, la vue emp_regions_view joint une table spatiale (classe d’entités) à une table non spatiale en fonction de la colonne emp_id. Cette vue inclut l’ObjectID, la colonne spatiale (region) et le nom de la région (rname) de la classe d’entités regions, ainsi que le nom et l’ID des employés issus de la table employees.
CREATE VIEW emp_region_view AS SELECT (e.emp_name,e.emp_id,r.rname,r.objectid,r.region)
FROM employees e,region r
WHERE e.emp_id = r.emp_id;
Accorder des privilèges sur la vue
Vous pouvez accorder des privilèges sur les vues à des utilisateurs spécifiques sans devoir leur accorder l’accès aux tables de base (employees et regions). Dans cet exemple, les privilèges SELECT sont accordés à l’utilisateur dispatch_mgr sur les deux vues :
conn rocket/nopeeking
GRANT SELECT ON rocket.view_dept_201
TO dispatch_mgr;
L’utilisateur dispatch_mgr peut désormais accéder à view_dept_201 pour visualiser les enregistrements des employés de tous les employés du département 201, ainsi qu’à emp_region_view à partir d’une connexion à une base de données dans ArcMap ou ArcGIS Pro pour afficher toutes les régions. Lorsque dispatch_mgr interroge une région de la vue, ArcGIS renvoie le nom de la région, ainsi que le nom et l’ID de tous les employés de cette région.