4D v16

CREATE VIEW

Accueil

 
4D v16
CREATE VIEW

CREATE VIEW  


 

 

CREATE [OR REPLACE] VIEW [nom_schema.]nom_vue [(liste_colonnes)] AS instruction_select[;]

La commande CREATE VIEW permet de créer une vue SQL nommée nom_vue (qui est un nom_sql standard) comportant les colonnes définies dans le paramètre liste_colonnes. Il est nécessaire de spécifier un nom de colonne si cette colonne est une fonction ou est dérivée d’une opération arithmétique (scalaire). Il est également nécessaire de spécifier un nom de colonne si vous voulez éviter que différentes colonnes aient le même nom (par exemple lors d’une opération JOIN) ou lorsque vous voulez utiliser un nom de colonne différent de celui dont elle est dérivée. 

Si le paramètre liste_colonnes est passé, il doit contenir le même nombre de colonnes qu’il y en a dans la requête de définition instruction_select de la vue. Si liste_colonnes est omis, les colonnes de la vue auront le même nom que ceux des colonnes de l’instruction_select de la vue. 

Les vues et les tables doivent avoir des noms uniques. 

Si vous passez l’option OR REPLACE, la vue sera automatiquement recréée si elle existe déjà. Cette option peut être utile afin de changer la définition d’une vue existante sans devoir supprimer/recréer/affecter les privilèges des objets déjà définis pour la vue courante.
Si l’option OR REPLACE n’est pas passée et si la vue existe déjà, une erreur est retournée. 

nom_schema est également un nom_sql standard et permet de désigner le nom du schéma devant contenir la vue. Si vous ne passez pas de nom_schema ou si vous passez un nom de schéma inexistant, la vue sera automatiquement affectée au schéma par défaut, nommé "DEFAULT_SCHEMA". 

instruction_select désigne l’instruction SELECT qui constitue la requête de définition de la vue ("definition query"). L’instruction_select est identique à un SELECT standard de 4D, avec toutefois les restrictions suivantes :

  • il n’est pas possible d’utiliser de clause INTO, LIMIT ou OFFSET car la limitation, le décalage ou l’affectation des variables the 4D sera effectué par l’instruction SELECT qui appelle la vue.
  • il n’est pas possible d’utiliser de clause GROUP BY.
  • les vues sont en mode lecture seulement, elles ne peuvent pas être mises à jour.

Une définition de vue est "statique", elle n’est pas mise à jour si les tables sources sont modifiées ou supprimées. En particulier, les colonnes ajoutées à une table n’apparaîtront pas dans une vue basée sur cette table. De même, essayer d’accéder via une vue à des colonnes supprimées provoquera une erreur.
En revanche, une vue se référant à une vue source détruite continuera de fonctionner. En effet, lors de sa création, une vue convertit toutes les références de vue(s) en références aux tables sources. 

La portée d’une vue est globale. Une fois qu’une vue a été créée par CREATE VIEW, elle est accessible par toutes les parties de l’application (4D distant via SQL, bases externes créées avec la commande CREATE DATABASE, autres bases via la commande SQL LOGIN, etc.) durant la session, jusqu’à ce qu’elle soit supprimée par la commande DROP VIEW ou que la base soit refermée.

Exemple  

Voici quelques exemples de définitions de vues basées sur la table PERSONS contenant les colonnes suivantes :

IDINT64
FIRST_NAMEVARCHAR(30)
LAST_NAMEVARCHAR(30)
DEPARTMENTVARCHAR(30)
SALARYINT

Une vue sans restrictions :

CREATE VIEW FULLVIEW AS
        SELECT * FROM PERSONS;

Une vue comportant des restrictions "horizontales". Par exemple, vous souhaitez afficher uniquement les personnes du service Marketing :

CREATE VIEW HORIZONTALVIEW (ID, FirstName, LastName, Salary) AS
        SELECT ID, FIRST_NAME, LAST_NAME, SALARY FROM PERSONS
        WHERE DEPARTMENT = 'Marketing';

Une vue avec agrégation :

CREATE VIEW AGGREGATEVIEW (FirstName, LastName AnnualSalary) AS
        SELECT FirstName, LastName, SALARY*12 FROM PERSONS;

Une vue comportant des restrictions "verticales". Par exemple, vous ne souhaitez pas afficher la colonne SALARY :

CREATE VIEW VERTICALVIEW (ID, FirstName, LastName, Department) AS
        SELECT ID, FIRST_NAME, LAST_NAME, DEPARTEMENT FROM PERSONS;

Une fois les vues définies, vous pouvez les utiliser comme des tables standard. Par exemple, vous souhaitez obtenir toutes les personnes dont le salaire est supérieur à 5 000 Euros :

SELECT * FROM FULLVIEW
    WHERE SALARY < 5000
    INTO :aID, :aFirstName, :aLastName, :aDepartment, :aSalary;

Autre exemple : vous souhaitez obtenir toutes les personnes du service Marketing dont le prénom est "Michael" :

SELECT ID, LastName, Salary FROM HORIZONTALVIEW
    WHERE FirstName='Michael'
    INTO :aID, :aLastName, :aSalary;



Voir aussi  

DROP VIEW

 
PROPRIÉTÉS 

Produit : 4D
Thème : Commandes SQL
Nom intl. : CREATE VIEW

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Référence SQL ( 4D v16)