Ich schreibe eine gespeicherte Prozedur, um Daten aus der Tabelle eines Benutzers in ein anderes Schema zu kopieren. Im Grunde ist es eine Reihe von INSERT .. SELECT-Anweisungen wie folgt aus:Zugriff auf die Tabelle eines anderen Benutzers in einer gespeicherten Oracle-Prozedur
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = 1234;
Dies funktioniert gut, wenn sie von sqlplus (oder TOAD für mich ;-)) Verlegerung damit ich weiß, dass ich über ausreichende Berechtigungen haben, aber wenn dies ist ein Teil der gespeicherten Prozedur wie folgt aus:
CREATE OR REPLACE FUNCTION COPY_KONG
(pKongNr IN NUMBER)
RETURN NUMBER
AUTHID CURRENT_USER
IS
BEGIN
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = pKongNr;
END;
ich einen Oracle-Fehler:
[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist
wie Sie sehen können, habe ich bereits eingefügt ein AUTHID
, aber ohne Erfolg.
Was kann ich noch tun? Ich bin hier ziemlich am Ende meiner Ideen.
Dank Vincent, schnelle Antwort! Ich war in der Lage, die Auswahl direkt meinem Benutzer zu gewähren, und es funktioniert jetzt. – Thorsten
Das ist sehr seltsames Verhalten, hat jemand einen Hinweis, warum das so ist. – Reimius
@reimius: Wir können das "Warum" nur erraten, da die Dokumentation in der Regel keinen Grund für eine bestimmte Implementierung enthält. Möglicherweise hat Oracle entschieden, keine Abhängigkeitsbeziehung zwischen Prozeduren und Rollen aufrechtzuerhalten, da dies zu einer massiven Dekompilierung führen könnte, die sich auf viele Schemas auswirkt, wenn eine Rolle geändert wird. –