从另一个模式访问一个模式的表

时间:2014-08-07 16:32:59

标签: oracle plsql

下面是我的SP,我有KMDEPOT_DB,ILX2012_KMDEPOT模式,我想使用select语句从上面提到的模式的表中获取数据。当我像下面的SQL语句一样直接执行时,它可以正常工作

INSERT INTO KMDEPOT_DB.RUN_ITEM(RUN_ID, SOURCE_ID, MATCH_NAME, TOC_ID)
SELECT
JOB.LASTRUNID,
TOCINSTANCE.SOURCEID,
TOC.MATCHNAME,
TOC.TOCID
FROM
ILX2012_KMDEPOT.AOI779_TOC TOC,
ILX2012_KMDEPOT.AOI779_TOCINSTANCE TOCINSTANCE,
ILX2012_KMDEPOT.JOB
WHERE
TOC.TOCID = TOCINSTANCE.TOCID AND JOB.AOIID = 700;

如果将相同的语句放在PL / SQL SP中,那么它会使表或视图不存在

CREATE OR REPLACE PROCEDURE insert_rows (
table_name IN VARCHAR2)
IS
BEGIN
INSERT INTO KMDEPOT_DB.RUN_ITEM(RUN_ID, SOURCE_ID, MATCH_NAME, TOC_ID)
SELECT
JOB.LASTRUNID,
TOCINSTANCE.SOURCEID,
TOC.MATCHNAME,
TOC.TOCID
FROM
ILX2012_KMDEPOT.AOI779_TOC TOC,
ILX2012_KMDEPOT.AOI779_TOCINSTANCE TOCINSTANCE,
ILX2012_KMDEPOT.JOB
WHERE
TOC.TOCID = TOCINSTANCE.TOCID AND JOB.AOIID = 700;
END;

为什么它不起作用?任何想法

1 个答案:

答案 0 :(得分:0)

您最有可能通过角色而非直接授权来访问ILX2012_KMDEPOT。如果要创建定义者权限存储过程(默认),则需要拥有直接授予您的基础对象的所有权限,而不是通过角色。通过角色授予的权限在定义者的权利存储过程中不可用。

您可以通过在SQL * Plus会话中禁用角色然后尝试运行INSERT来验证这是否是问题。如果你这样做

SQL> set role none;
SQL> <<your insert statement>>

我希望INSERT会失败。如果是,则确认问题在于您使用通过角色授予的权限。