Hallo zusammen,
ich habe einen eigenartigen Effekt beim Abruf von BLOBs über ein Package aus einer View. Folgende Situation: in einem Package gibt es eine Funktion: <pre>
function GET_XXX_DATA_PRC(
p_XXX_ID IN NUMBER,
p_DOCDATA OUT BLOB,
p_PROV_NAME OUT VARCHAR2,
p_err_msg OUT VARCHAR2)
return PLS_Integer;</pre>
Die Funktion fragt über ein einfaches SELECT INTO eine VIEW ab. Das SELECT INTO ist in einen begin exception end Block gekapselt, in dem alle Exceptions abgefangen und über den RETURN-Wert der Funktion zurückgegeben werden. Das Package wird unter den Rechten des Objekt-Eigners ausgeführt. Der Nutzer hat lediglich EXECUTE-Rechte für das Package.
Beim Aufruf der Funktion als "normaler" Nutzer wird jedoch immer die Exception "Tabelle oder View nicht vorhanden ausgelöst - und zwar ausserhalb der Funktion. D.h. der Rückgabewert ist 0, alle Out-Parameter sind wie erwartet gesetzt, bis auf das BLOB.
Jetzt kommt das Eigenartige: Wird die Funktion <b>einmal</b> als Eigner der Objekte (Package, View und abgefragte Tabelle) aufgerufen, dann funktionieren anschließend auch alle Aufrufe der "normalen" Nutzer - bis zum nächsten DB-Neustart.
Es ist das einzige Package mit dem wir diese Probleme haben, es ist aber auch das einzige Package, in dem BLOBs über eine VIEW abgefragt werden. Ich kann mir nur Vorstellen, das es mit dem BLOB und dem zugehörigen LOB-Locator zusammenhängt. Was ich auf jeden Fall vermeiden möchte: den Nutzern SELECT-Rechte auf die View oder ganz und gar auf die TABLE zu erteilen.
Kennt jemand diesen Effekt und kann mir das erklären?
Verwendet wird Oracle 8.1.6 auf W2K Server.
Gruß Falk
ich habe einen eigenartigen Effekt beim Abruf von BLOBs über ein Package aus einer View. Folgende Situation: in einem Package gibt es eine Funktion: <pre>
function GET_XXX_DATA_PRC(
p_XXX_ID IN NUMBER,
p_DOCDATA OUT BLOB,
p_PROV_NAME OUT VARCHAR2,
p_err_msg OUT VARCHAR2)
return PLS_Integer;</pre>
Die Funktion fragt über ein einfaches SELECT INTO eine VIEW ab. Das SELECT INTO ist in einen begin exception end Block gekapselt, in dem alle Exceptions abgefangen und über den RETURN-Wert der Funktion zurückgegeben werden. Das Package wird unter den Rechten des Objekt-Eigners ausgeführt. Der Nutzer hat lediglich EXECUTE-Rechte für das Package.
Beim Aufruf der Funktion als "normaler" Nutzer wird jedoch immer die Exception "Tabelle oder View nicht vorhanden ausgelöst - und zwar ausserhalb der Funktion. D.h. der Rückgabewert ist 0, alle Out-Parameter sind wie erwartet gesetzt, bis auf das BLOB.
Jetzt kommt das Eigenartige: Wird die Funktion <b>einmal</b> als Eigner der Objekte (Package, View und abgefragte Tabelle) aufgerufen, dann funktionieren anschließend auch alle Aufrufe der "normalen" Nutzer - bis zum nächsten DB-Neustart.
Es ist das einzige Package mit dem wir diese Probleme haben, es ist aber auch das einzige Package, in dem BLOBs über eine VIEW abgefragt werden. Ich kann mir nur Vorstellen, das es mit dem BLOB und dem zugehörigen LOB-Locator zusammenhängt. Was ich auf jeden Fall vermeiden möchte: den Nutzern SELECT-Rechte auf die View oder ganz und gar auf die TABLE zu erteilen.
Kennt jemand diesen Effekt und kann mir das erklären?
Verwendet wird Oracle 8.1.6 auf W2K Server.
Gruß Falk
Comment