2017-12-30 28 views
2

Erstens, ich habe diese Aufgabe durch das System erstellt:Orakel, den Zugriff auf eine Elementfunktion aus einer Sicht

create or replace 
type type_client (
    num int , 
    username varchar(30), 
    balance int, 
    ta table_achat, 
    ref_admin ref type_admin, 

    member function get_prix_achat_total return int 
); 

Und ich habe eine Tabelle dieses Objekt durch das System erstellt:

create table table_client of type_client 

Und eine Ansicht auch durch das System erstellt (es jeden Benutzer gibt seine richtige Linie von table_client wählen):

create view one_line_client as 
select * from table_client 
where username = (select user from dual); 

Dann gebe ich einen Benutzer namens c##client1-zum Beispiel- ein Privileg, um auf diese Ansicht zuzugreifen.

Mein Problem ist, kann der Benutzer c##client1 alle Daten vom Typ type_client mit Ausnahme der Member-Funktion zugreifen kann;

Wenn ich

select balance from system.one_line_client; 

oder

select num from system.one_line_client; 

dann bekomme ich das richtige Ergebnis.

Aber wenn ich

tun
select olc.get_prix_achat_total() from system.one_line_client olc; 

dann bekomme ich den Fehler:

ORA-00904: "OOO" "GET_PRIX_ACHAT_TOTAL": ungültige Kennung
00904. 00000 - „% s. : ungültige Kennung“

+0

Off Topic, aber warum erstellen Sie Objekte im Schema SYSTEM? Schlecht. – OldProgrammer

+0

bitte eine [mcve] angeben. – OldProgrammer

Antwort

2

Das Sternchen bedeutet nicht alles, es ist die "all-column wildcard".

create view one_line_client as 
select t.*, 
     t.get_prix_achat_total() as get_prix_achat_total 
from table_client t 
where username = (select user from dual); 

dieser Spalte Ausdruck die Funktion aufrufen, wird indirekt: Member-Funktionen müssen explizit als Spaltenausdruck, um in der Ansicht zu zeigen, aufgelistet. Es darf keine Klammern verwenden, wenn es in der Ansicht ausgewählt wird:

select olc.get_prix_achat_total from one_line_client olc; 
+0

Waaaaaw waaaw waaw !!! Große Antwort !!! Vielen Dank :-) – user9152856

Verwandte Themen