【发布时间】:2017-09-21 06:19:26
【问题描述】:
在我自己的架构中在 PL/SQL (Oracle) 中运行此过程时出错:
CREATE OR REPLACE PROCEDURE my_procedure AS
BEGIN
INSERT INTO myschema.mytable (col1, col2, col3, col4)
SELECT COUNT(*), col2, col3, col4
FROM AnotherSchema.anotherTable
GROUP BY AnotherSchema.anotherTable.col2;
END my_procedure;
这些是我得到的错误:
错误(4,7):PL/SQL:SQL 语句被忽略
错误(6,22):PL/SQL:ORA-00942:表或视图不存在
AnotherSchema.anotherTable 确实存在。 myschema.mytable 也是如此
事实上,当我只运行 INSERT 命令时,它工作正常,并且一行被插入到 myschema.mytable 中:
INSERT INTO myschema.mytable (col1, col2, col3, col4)
SELECT COUNT(*), col2, col3, col4
FROM AnotherSchema.anotherTable
GROUP BY AnotherSchema.anotherTable.col2;
我不明白为什么当我将 INSERT 函数放入过程中时会出现此错误。
编辑:
我需要澄清一下,我是在自己的架构中运行脚本并插入到自己在自己的架构中创建的表中。并且我可以对从 AnotherSchema 读取的表执行选择(从我的模式)。
【问题讨论】:
-
首先,尝试正确分组,例如:
GROUP BY AnotherSchema.anotherTable.col2, AnotherSchema.anotherTable.col3, AnotherSchema.anotherTable.col4。如果您从中调用此过程的用户没有该表的读取权限,您可能会收到此错误;你在用同一个用户运行它吗? -
感谢您的回复。显然,这是一个错字,因为很明显我只是在我的帖子中提供了伪脚本,而不是实际的脚本。我已经在我的帖子中更正了这一点。是的,我正在使用同一个用户阅读表格,并且我已经阅读了该表格的特权(AnotherSchema.aotherTable)。
-
好吧,伪脚本也不起作用,最好给出更接近真实脚本或脚本本身的近似值。我的问题仍然是关于你正在运行它的用户。我很清楚这个错误 - 从第 4 行(语句)开始,然后是第 6 行的
ORA-942-AnotherSchema.anotherTable。您定义my_procedure的架构可能与您单独用于INSERT语句的架构不同。 -
将 AnotherSchema.anotherTable 上的选择授予 myschema?
-
有些东西不见了,如果你像上面一样直接授予,它会起作用,我试过了
标签: oracle plsql sql-insert procedure