在Oracle存储过程中访问另一个用户的表

在Oracle存储过程中访问另一个用户的表,第1张

概述我正在编写一个存储过程,将数据从一个用户的表复制到另一个模式.基本上,它是一系列INSERT .. SELECT语句,如: INSERT INTO GESCHAEFTE SELECT * FROM TURAT03.GESCHAEFTE WHERE kong_nr = 1234; 这可以从sqlplus(或TOAD for me ;-))发布,所以我知道我有足够的权限,但是当这是存 我正在编写一个存储过程,将数据从一个用户的表复制到另一个模式.基本上,它是一系列INSERT .. SELECT语句,如:
INSERT INTO GESCHAEFTE  SELECT *    FROM TURAT03.GESCHAEFTE   WHERE kong_nr = 1234;

这可以从sqlplus(或TOAD for me ;-))发布,所以我知道我有足够的权限,但是当这是存储过程的一部分,如下所示:

CREATE OR REPLACE FUNCTION copY_KONG    (pKongNr IN NUMBER)    RETURN NUMBER    AUTHID CURRENT_USERISBEGIN   INSERT INTO GESCHAEFTE      SELECT *       FROM TURAT03.GESCHAEFTE       WHERE kong_nr = pKongNr;END;

我收到一个Oracle错误:

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

如你所见,我已经插入了一个AUTHID,但没有效果.

我还可以做些什么?我在这里结束了我的想法.

必须授予过程的所有者才能直接访问底层对象. not through a role.要具有与过程相同级别的访问权限,请使用以下命令:
SET RolE NONE;

要从过程访问另一个表,您需要直接授予SELECT,而不是通过角色授予SELECT

GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;

This article by Tom Kyte包含附加信息.

总结

以上是内存溢出为你收集整理的在Oracle存储过程中访问另一个用户的表全部内容,希望文章能够帮你解决在Oracle存储过程中访问另一个用户的表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存