Announcement

Collapse
No announcement yet.

Abruf von BLOB-Daten aus einer View

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abruf von BLOB-Daten aus einer View

    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
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

  • #2
    Hallo, evtl. zu spät, aber trotzdem :-)) <BR>
    Es scheint sich hier um ein GRANTING Problem zu handeln.<BR>
    Beim Zugriff auf die View oder Tabelle innerhalb der Funktion, wird dort der Owner mitangegeben?<BR>
    SELECT * FROM OWNER.VIEW<BR>
    Wenn nein, dann füge dort den OWNER ein.<BR>
    Wenn der OWNER bereits angeben ist, so vergib doch mal ein SELECT Recht auf eine View, und versuche dann die Funktion unter auzuführen.<BR>

    Hoffe du kommst weiter<BR>
    Matthias<BR&gt

    Comment

    Working...
    X