2017-12-29 2 views
0

auswählen Ich habe ein Problem in Oracle Gewährung von Select für eine Objekttabelle.ORA-00904 Fehler nach der Gewährung in einer Tabelle des Objekts

Wenn eine Tabelle wie

create table t (name char, ...) 

erstellt wird, dann habe ich keine Probleme keine Privilegien auf es jedem Benutzer zu gewähren.

Aber wenn die Tabelle von einem Objekt dh

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

    member function get_prix_achat_total return int 
); 

create table t of type_client 

erstellt versuche ich, auf sie zu einem user1 zum Beispiel wählen zu geben, aber wenn ich von user1 verbinden und versuchen, alle Daten aus dieser Tabelle zu wählen:

select * from system.table_client 

ich sehe die Nachricht:

ORA-00904: : invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 1 Column: 34

Manchmal sehe ich die Meldung:

Internal Error: Unknown or unimplemented accessor type: 9

+2

Wenn Sie sagen "es funktioniert nicht", was genau meinst du? Erhalten Sie eine Fehlermeldung, und wenn ja, was? –

+0

Bitte lesen Sie "** [Es funktioniert nicht!] (Http://idownvotedbecau.se/itsnotworking/) **" für weitere Informationen. –

+0

wenn ich versuche einige Daten aus der Tabelle zu wählen ist die folgende Meldung: ORA-00904: ungültige Kennung 00904. 00000 - "% s: ungültige Kennung" * Ursache: * Aktion: Fehler in Zeile: 1 Spalte: 34 – user9152856

Antwort

1

wie Ihre Select Abfrage scheint, ist nicht correct Sie können es tun, wie unten:

SQL> show user 
USER is "SCOTT" 

SQL> CREATE TYPE emp_type AS OBJECT (
    2 eno  NUMBER, 
    3 ename VARCHAR2(36)); 
    4/

Type created. 

SQL> CREATE TABLE emp_tp OF emp_type; 

Table created. 

SQL> GRANT SELECT on emp_tp TO system ; 

Grant succeeded. 

SQL> connect 
Enter user-name: system 
Enter password: **** 
Connected. 

SQL> show user 
USER is "SYSTEM" 

SQL> Select * from scott.emp_tp;--<--Make sure you put schema name before table name 

no rows selected 

SQL> 

Edit:

Wie in meinen Kommentaren erwähnt, ist die Objektdefinition hat auch eine member Funktion. Also, wenn Sie Select tb.get_prix_achat_total() from t tb tun, sollte es Ergebnis zurückgeben. Sie müssen den Spaltennamen anstelle von * verwenden, wenn in der Definition eine Funktion vorhanden ist.

+0

Die Tabelle table_client wird vom System erstellt ... Wenn ich von Benutzer1 verbinde, schreibe ich die Abfrage" select * from system.table_client "aber der gleiche Fehler ... – user9152856

+0

@ user9152856 Befolge meine Schritte, ich zeigte deutlich eine Demo. Egal, wer die Tabelle erstellt, sollte es einmal ausgewählt werden können. Lesen Sie meine volle Post und vor allem Select-Anweisung, – XING

+0

was ich meine, ist Ihr Code ordnungsgemäß funktioniert, weil das Objekt und die Tabelle von scott erstellt wird, so dass das System sie sehen kann, ohne irgendeine Gewähr .. aber in meinem Fall, erstellen Sie das Objekt und Tabelle, und ein normaler Benutzer versuchen, eine Verbindung zur Tabelle herzustellen. – user9152856

Verwandte Themen