允许进行DML操作的视图条件
视图可以屏蔽某些基表的信息,或是join多个基表组成一个复杂查询,视图本身也是可以进行DML操作,但受一些条件的限制。 首先我们看下官方文档对视图进行DML操作的要求说明: The following notes apply to updatable views: An updatable view is one you ca
视图可以屏蔽某些基表的信息,或是join多个基表组成一个复杂查询,视图本身也是可以进行DML操作,但受一些条件的限制。
首先我们看下官方文档对视图进行DML操作的要求说明:
The following notes apply to updatable views:
An updatable view is one you can use to insert, update, or delete base table rows. You can create a view to be inherently updatable, or you can create an INSTEAD OF trigger on any view to make it updatable.
这里说明了两种可updateable(包括增删改基表)视图的方法:一是继承基表的视图,二是使用INSTEAD OF的触发器来实现任意视图的updatable。
To learn whether and in what ways the columns of an inherently updatable view can be modified, query the USER_UPDATABLE_COLUMNS data dictionary view. The information displayed by this view is meaningful only for inherently updatable views.
USER_UPDATABLE_COLUMNS数据字典视图可以找到视图的哪些字段可以进行增加、更新和删除。
For a view to be inherently updatable, the following conditions must be met:
对于这种updatable继承的视图,需要满足以下条件:
1. Each column in the view must map to a column of a single table. For example, if a view column maps to the output of a TABLE clause (an unnested collection), then the view is not inherently updatable.
2. The view must not contain any of the following constructs:
A set operator
A DISTINCT operator
An aggregate or analytic function
A GROUP BY, ORDER BY, MODEL, CONNECT BY, or START WITH clause
A collection expression in a SELECT list
A subquery in a SELECT list
A subquery designated WITH READ ONLY
Joins, with some exceptions, as documented in Oracle Database Administrator's Guide
3. In addition, if an inherently updatable view contains pseudocolumns or expressions, then you cannot update base table rows with an UPDATE statement that refers to any of these pseudocolumns or expressions.
4. If you want a join view to be updatable, then all of the following conditions must be true:
对于一个join视图,如果需要可updatable,那么就需要满足如下条件:
(1) The DML statement must affect only one table underlying the join.
DML必须仅影响一个join连接的表。
(2) For an INSERT statement, the view must not be created WITH CHECK OPTION, and all columns into which values are inserted must come from a key-preserved table. A key-preserved table is one for which every primary key or unique key value in the base table is also unique in the join view.
INSERT语句,不能使用WITH CHECK OPTION,并且所有待插入的列都来自于key-preserved表。
key-preserved表是指基表中每个主键或唯一键也必须是在join视图中唯一。
(3) For an UPDATE statement, the view must not be created WITH CHECK OPTION, and all columns updated must be extracted from a key-preserved table.
UPDATE语句,视图不能使用WITH CHECK OPTION创建,同样更新字段也必须来自于key-preserved表。
5. For a DELETE statement, if the join results in more than one key-preserved table, then Oracle Database deletes from the first table named in the FROM clause, whether or not the view was created WITH CHECK OPTION.
DELETE语句,如果join结果有多个key-preserved表,Oracle只会删除FROM子句中第一个表的记录,不管视图是否使用WITH CHECK OPTION。
下面通过一系列实验来说明。
创建测试表:
create table dept(deptid int primary key, deptname varchar2(20));
create table employee(empid int primary key, empname varchar2(20), deptid int);
创建测试数据:
insert into dept values(1,'dept1');
insert into dept values(2,'dept2');
insert into dept values(3,'dept3');
insert into employee values(1,'emp1',1);
insert into employee values(2,'emp2',1);
insert into employee values(3,'emp3',2);
创建视图:
create view testv
as select d.deptid deptid, deptname, empid, empname, e.deptid edeptid
from dept d join employee e
on d.deptid = e.deptid;
SQL> select * from testv;
DEPTID DEPTNAME EMPID EMPNAME EDEPTID
---------- -------------------- ---------- -------------------- ----------
1 dept1 1 emp1 1
1 dept1 2 emp2 1
2 dept2 3 emp3 2
仅employee表是key-preserved表。
测试1:对key-preserved表字段进行增加、更新的操作。
update testv set empname='empx' where edeptid=1;
update testv set empname='empx' where empid=1;
update testv set empname='empx' where deptid=1;
insert into testv(empid,empname,edeptid) values(4,'emp4',2);
以上SQL可以执行,因为修改或添加的字段都是employee的,即key-preserved表。
测试2:验证上述“DELETE语句,如果join结果有多个key-preserved表,Oracle只会删除FROM子句中第一个表的记录,不管视图是否使用WITH CHECK OPTION”。
create view testv
as select d.deptid deptid, deptname, empid, empname, e.deptid edeptid
from employee e join dept d
on d.deptid = e.deptid;
或
create view testv
as select d.deptid deptid, deptname, empid, empname, e.deptid edeptid
from employee e join dept d
on d.deptid = e.deptid
WITH CHECK OPTION;
select * from testv;
DEPTID DEPTNAME EMPID EMPNAME EDEPTID
---------- -------------------- ---------- -------------------- ----------
1 dept1 1 emp1 1
1 dept1 2 emp2 1
2 dept2 3 emp3 2
delete from testv where deptid = 1;
2 rows deleted.
select * from dept;
DEPTID DEPTNAME
---------- --------------------
1 dept1
2 dept2
3 dept3
select * from employee;
EMPID EMPNAME DEPTID
---------- -------------------- ----------
3 emp3 2
delete from testv where empid = 1;
1 row deleted.
select * from testv;
DEPTID DEPTNAME EMPID EMPNAME EDEPTID
---------- -------------------- ---------- -------------------- ----------
1 dept1 2 emp2 1
2 dept2 3 emp3 2
select * from dept;
DEPTID DEPTNAME
---------- --------------------
1 dept1
2 dept2
3 dept3
select * from employee;
EMPID EMPNAME DEPTID
---------- -------------------- ----------
2 emp2 1
3 emp3 2
测试3:对于INSERT和UPDATE语句,不能使用WITH CHECK OPTION创建视图。
create view test1v
as select t1id ,t1v,t2id,t2v
from test1 join test2
on test1.t1id=test2.t2id
with check option;
insert into test1v(t1id,t1v) values(4,'t4');
*
ERROR at line 1:
ORA-01733: virtual column not allowed here
update test1v set t1id=4 where t1id=1;
*
ERROR at line 1:
ORA-01733: virtual column not allowed here
测试4:非key-preserved表字段不能更新或插入。
update testv set deptname='deptx' where deptid=1
update testv set deptname='deptx' where empid=1
insert into testv(deptid,deptname) values(4,'dept4')
ORA-01779: cannot modify a column which maps to a non key-preserved table
测试5:查看视图中哪些字段可以增删改。
select * from USER_UPDATABLE_COLUMNS where table_name='TESTV';
OWNER TABLE_NAME COLUMN_NAME UPD INS DEL
-------------------------------------------------------------------------------------------
DCSOPEN TESTV DEPTID NO NO NO
DCSOPEN TESTV DEPTNAME NO NO NO
DCSOPEN TESTV EMPID YES YES YES
DCSOPEN TESTV EMPNAME YES YES YES
DCSOPEN TESTV EDEPTID YES YES YES

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Avec la popularité des téléphones intelligents, nous recevons chaque jour un grand nombre de messages texte, dont certains sont des messages publicitaires et promotionnels, et d'autres sont des messages texte indésirables. Ces messages texte nous font non seulement perdre du temps, mais occupent également de l'espace. de nos téléphones portables. Heureusement, les iPhones offrent certaines fonctionnalités pour bloquer ces messages texte ennuyeux. Cet article explique comment bloquer les messages texte sur iPhone. Pour bloquer les messages texte, ouvrez d’abord l’application Paramètres, puis faites défiler et appuyez sur Messages. Dans l'interface des paramètres d'informations, vous pouvez voir certaines options, notamment « Bloqué

PyCharm est un environnement de développement intégré (IDE) Python très populaire. Il fournit une multitude de fonctions et d'outils pour rendre le développement Python plus efficace et plus pratique. Cet article vous présentera les méthodes de fonctionnement de base de PyCharm et fournira des exemples de code spécifiques pour aider les lecteurs à démarrer rapidement et à maîtriser l'utilisation de l'outil. 1. Téléchargez et installez PyCharm Tout d'abord, nous devons nous rendre sur le site officiel de PyCharm (https://www.jetbrains.com/pyc

sudo (exécution du superutilisateur) est une commande clé dans les systèmes Linux et Unix qui permet aux utilisateurs ordinaires d'exécuter des commandes spécifiques avec les privilèges root. La fonction de sudo se reflète principalement dans les aspects suivants : Fournir un contrôle des autorisations : sudo réalise un contrôle strict sur les ressources système et les opérations sensibles en autorisant les utilisateurs à obtenir temporairement les autorisations de superutilisateur. Les utilisateurs ordinaires ne peuvent obtenir des privilèges temporaires via sudo qu'en cas de besoin et n'ont pas besoin de se connecter en permanence en tant que superutilisateur. Sécurité améliorée : en utilisant sudo, vous pouvez éviter d'utiliser le compte root lors des opérations de routine. L'utilisation du compte root pour toutes les opérations peut entraîner des dommages inattendus au système, car toute opération incorrecte ou imprudente bénéficiera de toutes les autorisations. et

Nous devons utiliser WeChat APP tout le temps, chaque jour. Les fonctions ici sont riches et diverses, non seulement pour que tout le monde puisse discuter ici, mais aussi pour que vous puissiez gérer diverses choses dans la vie. Ils peuvent très bien résoudre certains problèmes et leur vie. peut devenir de mieux en mieux. De nos jours, tout le monde aime toujours consulter le cercle d'amis. Vous constaterez qu'il y a des mises à jour de la vie publiées par vos amis sur les informations du cercle d'amis, enregistrez une partie de votre vie merveilleuse et définissez la visibilité. plage de vos Moments. Vous pouvez visualiser ces Moments dans un délai spécifié. Chaque fois que vous vérifiez vos Moments, vous pourrez découvrir quelque chose. Tout le monde est très irrité par l'interface push publicitaire et souhaite la fermer. .

Nous aimons tous particulièrement la plateforme sociale Tantan. Elle est très sûre et fiable. Nous pouvons tous nous faire des amis sur Internet en faisant des correspondances aléatoires, nous sommes sûrs d'être mis en relation avec des utilisateurs qui s'aiment. Vous pouvez discuter socialement en toute sécurité ici. Discuter tous les jours peut rapprocher et rapprocher tout le monde, et de nombreux amis utilisent ce réseau social. Lorsque vous êtes sur la plateforme, vous ne voulez certainement pas que certains de vos amis ou certains amis soient sur votre téléphone portable. carnet d'adresses pour le savoir. Pour éviter certaines situations embarrassantes, vous pouvez utiliser la méthode de blocage des contacts ici, et il n'y en a pas beaucoup. Si vous savez comment bloquer des contacts, vous pouvez lire ces tutoriels proposés par l'éditeur.

Étapes de fonctionnement et précautions de LinuxDeploy LinuxDeploy est un outil puissant qui peut aider les utilisateurs à déployer rapidement diverses distributions Linux sur des appareils Android, permettant aux utilisateurs de découvrir un système Linux complet sur leurs appareils mobiles. Cet article présentera en détail les étapes de fonctionnement et les précautions de LinuxDeploy et fournira des exemples de code spécifiques pour aider les lecteurs à mieux utiliser cet outil. Étapes de l'opération : Installer LinuxDeploy : Tout d'abord, installez

1. Comment Zhaopin Recruitment peut-il empêcher l'entreprise de consulter mon CV ? Tutoriel sur Zhaopin Recruitment pour empêcher les entreprises de voir votre CV ! 1. Ouvrez l'application Zhaopin Recruitment téléchargée, connectez-vous à votre compte et accédez à la page principale. 2. Après avoir accédé à la page principale, cliquez sur Mon et sélectionnez CV en ligne. 3. Après avoir atteint l'interface de reprise, cliquez sur le coin supérieur droit et ouvrez l'option des paramètres de confidentialité. 4. Après avoir accédé à l'interface de confidentialité, cliquez sur Bloquer la société. 5. Dans l'interface pour ajouter un blocage, saisissez le nom de l'entreprise que vous souhaitez bloquer. 6. Après avoir finalement sélectionné, cliquez sur le bouton de blocage ci-dessous. Il a été configuré et l'entreprise ne pourra pas voir votre CV.

Vraisemblablement, de nombreux utilisateurs ont plusieurs ordinateurs inutilisés à la maison et ont complètement oublié le mot de passe de mise sous tension car ils n'ont pas été utilisés depuis longtemps. Ils aimeraient donc savoir quoi faire s'ils oublient le mot de passe ? Alors jetons un coup d’œil ensemble. Que faire si vous oubliez d'appuyer sur F2 pour le mot de passe de démarrage Win10 ? 1. Appuyez sur le bouton d'alimentation de l'ordinateur, puis appuyez sur F2 lorsque vous allumez l'ordinateur (différentes marques d'ordinateurs ont des boutons différents pour accéder au BIOS). 2. Dans l'interface du BIOS, recherchez l'option de sécurité (l'emplacement peut être différent selon les marques d'ordinateurs). Habituellement dans le menu des paramètres en haut. 3. Recherchez ensuite l’option SupervisorPassword et cliquez dessus. 4. À ce stade, l'utilisateur peut voir son mot de passe, et en même temps trouver Activé à côté et le basculer sur Dis.
