在PROCEDURE中使用SELECT的INSERT错误(PL / SQL)

时间:2017-09-21 06:19:27

标签: oracle plsql sql-insert procedure

我在自己的架构中在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的表格中执行select(来自我的架构)。

2 个答案:

答案 0 :(得分:1)

您没有直接授予其他模式中的表的select权限,但可能是通过角色,为了使您的插入在PLSQL中工作,您需要直接授予这些表的选择。

这是来自Ask Tom的链接,解释了为什么会这样:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1065832643319

答案 1 :(得分:0)

如果表示表/视图不存在,那么可能是您在使用过程时拼错了表名。

其次,如果表名正确,请确保myschema在AnotherSchema.anotherTable上具有select权限。在插入记录时检查是否在myschema或anotherschema中运行了insert语句。