Estoy escribiendo un procedimiento almacenado para copiar datos de la tabla de un usuario a otro esquema. Básicamente, se trata de una serie de INSERT .. instrucciones SELECT como esto:Accediendo a la tabla de otro usuario dentro de un Procedimiento almacenado de Oracle
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = 1234;
Esto funciona bien cuando issueing de sqlplus (o SAPO para mí ;-)), así que sé que tengo suficientes privilegios, pero cuando esto es parte del procedimiento almacenado de esta manera:
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;
consigo un error de Oracle:
[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist
como se puede ver, ya he insertado un AUTHID
, pero fue en vano.
¿Qué más puedo hacer? Estoy casi al final de mis ideas aquí.
Gracias Vincent, respuesta rápida! Pude otorgarle directamente la selección a mi usuario y funciona ahora. – Thorsten
Este es un comportamiento muy extraño, ¿alguien tiene una referencia de por qué esto es así. – Reimius
@reimius: Solo podemos adivinar el "por qué" ya que la documentación generalmente no menciona un motivo para una implementación en particular. Tal vez Oracle elija no mantener un vínculo de dependencia entre los procedimientos y los roles, ya que podría provocar una descompilación masiva que afecte a muchos esquemas cuando se modifique un rol. –