Re: ora-01400: Lückenhafte Fehlermeldung bei Insert über anderes Schema
- From: Urs Metzger <urs@xxxxxxxxxxxxx>
- Date: Sun, 05 Mar 2006 00:21:11 +0100
Stefan Graf schrieb:
....Bei anderen DB-System kann man Inhalte von Views aus Prinzip nicht ändern.
Bei Oracle geht das auch nur, so lange die View sich nur auf eine Tabelle
bezieht.
Dass das doch geht, wird weiter unten gezeigt.Wenn gibt dem User lieber das Recht direkt in die Tabelle zu schreiben.
Genau das will man aber vielleicht gerade vermeiden.
Dann sollte der Benutzer auch keine Insert und Update-Rechte auf der View haben ;-)
Mit gejointen Views geht das so oder so nicht mehr. Und genau dafür sind Views gedacht. Damit werden DB-Strukturen ab der dritten Normalform lesbar aufgelöst.
Überhaupt nicht komisch. Aber professionell.
Das über irgend welche komischen Viewkonstrukte zu erledigt ist nicht sehr sinnvoll um nicht zu sagen unprofessionell.
Sinnvollerweise hat der normale User gar keine Rechte etwas zu ändern. Das wird alles über Stored Proceduren usw. erledigt. Dort kann dann eine gute Rechteverwaltung prüfen ob er das darf.So eine Rechteverwaltung ist nicht trivial. Views sind unter anderem dafür da,
das zu vereinfachen. Klassisches Beispiel:
SQL> connect hr/hr
Connect durchgefⁿhrt.
SQL> create view employees_2 as select * from employees
2 where department_id = 2;
View wurde erstellt.
SQL> grant select, update on employees_2 to scott;
Benutzerzugriff (Grant) wurde erteilt.
Jetzt kann scott seinen Angestellten die Gehälter kürzen, wie er will, aber eben nur in seiner Abteilung.
So, jetzt zu der verbreitenen Theorie mit den Views über mehrerern Tabellen, die man nicht updaten kann (das Beispiel ist etwas länger, sorry):
SQL> create table t1(id number primary key, val number);
Tabelle wurde erstellt.
SQL> create table t2(id number primary key, val number);
Tabelle wurde erstellt.
SQL> alter table t2
2 add constraint fk2_1
3 foreign key(id) references t1(id);
Tabelle wurde geSndert.
SQL> insert into t1 (select rownum, null from all_objects);
4739 Zeilen wurden erstellt.
SQL> insert into t2 (select rownum, object_id from all_objects);
4739 Zeilen wurden erstellt.
SQL> create view v1(id, val1, val2)
2 as select t1.id, t1.val, t2.val
3 from t1, t2
4 where t2.id = t1.id;
View wurde erstellt.
SQL> select * from v1 where id <= 5;
ID VAL1 VAL2
---------- ---------- ----------
1 258
2 259
3 311
4 313
5 314
5 Zeilen ausgewShlt.
SQL> update v1 set val1 = 5 where id = 1;
1 Zeile wurde aktualisiert.
SQL> select * from v1 where id = 1;
ID VAL1 VAL2
---------- ---------- ----------
1 5 258
SQL> update v1 set val1 = val2;
4739 Zeilen wurden aktualisiert.
Grüße, Urs
.
- References:
- ora-01400: Lückenhafte Fehlermeldung bei Insert über anderes Schema
- From: Thomas Blankschein
- ora-01400: Lückenhafte Fehlermeldung bei Insert über anderes Schema
- Prev by Date: Re: Oracle 9i - Anfängerfrage zu Collections in PL/SQL
- Next by Date: Re: Oracle 9i - Anfängerfrage zu Collections in PL/SQL
- Previous by thread: Re: ora-01400: Lückenhafte Fehlermeldung bei Insert über anderes Schema
- Next by thread: Re: ora-01400: Lückenhafte Fehlermeldung bei Insert über anderes Schema
- Index(es):
Relevant Pages
|