Domanda

Sto scrivendo una stored procedure per copiare i dati dalla tabella di un utente ad un altro schema. In sostanza, si tratta di una serie di INSERT .. istruzioni SELECT come questa:

INSERT INTO GESCHAEFTE
  SELECT *
    FROM TURAT03.GESCHAEFTE
   WHERE kong_nr = 1234;

Questo funziona bene quando redigere da sqlplus (o rospo per me ;-)) quindi so che ho privilegi sufficienti, ma quando questo è parte della stored procedure in questo modo:

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;

ottengo un errore Oracle:

[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist

Come potete vedere, ho già inserito un AUTHID, ma senza alcun risultato.

Che altro posso fare? Sono più o meno alla fine delle mie idee qui.

È stato utile?

Soluzione

Il proprietario di una procedura deve essere concesso il privilegio di accedere agli oggetti sottostanti direttamente, non attraverso un ruolo . Per avere lo stesso livello di accesso, come le procedure di, utilizzare i seguenti comandi:

SET ROLE NONE;

Per accedere a un altro tavolo da una procedura, è necessario essere concesso di selezionare direttamente, non attraverso un ruolo:

GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;

Questo articolo di Tom Kyte contiene informazioni aggiuntive.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top