Re: ora-01400: Lückenhafte Fehlermeldung bei Insert über anderes Schema



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.
....

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.
Dass das doch geht, wird weiter unten gezeigt.

Das über irgend welche komischen Viewkonstrukte zu erledigt ist nicht sehr sinnvoll um nicht zu sagen unprofessionell.
Überhaupt nicht komisch. Aber professionell.
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
.



Relevant Pages

  • Re: Wozu braucht man Views?
    ... ein View (Ansicht) liefert dir einen Ausschnitt auf ... Der View ist am Ende zunächst mal eine SQL Abfrage. ... temporäre Tabelle zur Verfügung gestellt. ...
    (microsoft.public.de.fox)
  • =?Utf-8?Q?Re:_SQL_2005_Express_Views_=28Sic?= =?Utf-8?Q?hten=29_Verst=C3=A4ndnisfrage?=
    ... Das gilt nicht für MS SQL Server!! ... SQL-Statement, d.h., das SQL-Statement wurde bereits geparst, optimiert ... Hier die Korrektur für SQL Server: ... Beim Speichern wird die View auf syntaktische Richtigkeit geparst. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: DataView traversing (ADO.NET)
    ... Der View ist ein Teil der Tabelle, und hat mit dem DS so erst mal ... Ein View auf ein DS... ... Count von View die Anzahl der gefilterten Zeilen. ... Jede Tabelle hat einen DefaultView, das hat mir bisher immer gereicht. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: INSERT INTO
    ... SQL Server Compact ist zwar mit dem SQL Dialekt SQL Server ... Was an an der geringen Bedeutung von Paradox in den letzten ... add(string quelle, string ziel, bool anhängen, bool aktualisieren) ... - ich erstelle für jede tabelle eine eigene datenbank. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: Name von Tmp-Tabelle aus Select ... Into
    ... Ganze wir fuer eine ASP-Ausgabe benoetigt. ... Rest in ASP. ... Ueber eine Tabelle, welche temporaer erzeugt wird, werden ... Im Moment sind bei dynamischem SQL zwei Dinge, ...
    (microsoft.public.de.sqlserver)