下面是我的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;
为什么它不起作用?任何想法
答案 0 :(得分:0)
您最有可能通过角色而非直接授权来访问ILX2012_KMDEPOT
。如果要创建定义者权限存储过程(默认),则需要拥有直接授予您的基础对象的所有权限,而不是通过角色。通过角色授予的权限在定义者的权利存储过程中不可用。
您可以通过在SQL * Plus会话中禁用角色然后尝试运行INSERT
来验证这是否是问题。如果你这样做
SQL> set role none;
SQL> <<your insert statement>>
我希望INSERT
会失败。如果是,则确认问题在于您使用通过角色授予的权限。