PHP Oracle via OCI8, keine Rows

Yuri_Orlov

Cadet 3rd Year
Registriert
Juli 2008
Beiträge
41
Hi Forum,

ich versuche gerade einer Oracle DB ein paar Daten zu entlocken.
Die Verbindung steht, aber ich erhalte keine Rows...

PHP:
$conn = oci_connect('dbuser', 'pwd', '//x.x.x.x/Servicename');
if (!$conn) {
    $e = oci_error();
    print htmlentities($e['message']);
    exit;
} else {
echo "Verbindung steht!";
}


$query = 'select table_name from user_tables';

$stid = oci_parse($conn, $query);
oci_execute($stid, OCI_DEFAULT);
while ($row = oci_fetch_array($stid, OCI_ASSOC)) {
foreach ($row as $item) {
echo $item." ";
}
echo "<br>\n";
}
oci_free_statement($stid);
oci_close($conn);


"This example lists all tables owned by the user"
heißt es im How To!

Ich erhalte leider nur ein "Verbindung steht!"...

Kann es vl. sein, daß der Admin es unterbunden hat, daß der dbuser alle Tabellen via select table_name from user_tables auflisten darf?

Jemand eine Idee?
Danke!
 
Bist du denn sicher, dass der User mit dem du connectest überhaupt eigene Tables angelegt hat?
Versuch doch sonst mal nen:
Code:
select 1+1 ergebnis from dual
Dann bekommst du garantiert eine Zeile zurück, wenn alles funktioniert...
 
Jap, dann funktioniert deine Verbindung, aber der User hat keine Tabellen...
 
Der Admin meint:

Hallo,
der Benutzer DBUSER_STATISTIK ist kein Schemaowner und hat demzufolge keine Tabellen. Er hat Leseberechtigungen auf die ihnen bekannten Views.

Gibt es eine Query welche alle "mir bekannten" Views zeigt?
 
Du kannst es mal versuchen mit:
Code:
select * from table_privileges where grantee != 'PUBLIC'

Falls die Views doch für alle freigegeben sind, schränkt das folgende Query die Liste etwas ein:
Code:
select * from table_privileges where owner not like '%SYS' and owner not in ('XDB', 'SYSTEM', 'ORDPLUGINS')

LG Ben
 
Das klappt!
Ich bekomme jetzt alle Views aufgelistet:

Code:
...
GRANTEE: DBUSER_STATISTIK
OWNER: DWH
TABLE_NAME: DIM_KUNDE
GRANTOR: DWH
SELECT_PRIV: Y
INSERT_PRIV: N
DELETE_PRIV: N
UPDATE_PRIV: N
REFERENCES_PRIV: N
ALTER_PRIV: N
INDEX_PRIV: N
...

zum Verständnis:
Was genau sehe ich hier?
Ein "SELECT * FROM DIM_KUNDE" liefert ein "ORA-00942: Tabelle oder View nicht vorhanden".

Wie greife ich auf ein View zu?
 
Zuletzt bearbeitet:
Falls dem angemeldeten Benutzer die Tabelle nicht gehört, musst du immer "Schema"."Objektnamen" angeben. Nach deinem obigen Beispiel wahrscheinlich "DWH"."DIM_KUNDE".
Natürlich muss der angemeldete Benutzer dazu auch die SELECT Berechtigung haben.
 
Zuletzt bearbeitet:
Zurück
Oben