PL/SQL在存储过程中包装分层查询

PL/SQL在存储过程中包装分层查询,sql,oracle,stored-procedures,plsql,syntax,Sql,Oracle,Stored Procedures,Plsql,Syntax,感谢大家的帮助,我对PL/SQL非常陌生,我发现它的语法比T-SQL更具挑战性。我有一个正常工作的PL/SQL游标,它可以将我想要的内容准确地插入到表中。下一步,我想把它包装在一个存储过程中,这样我就可以传入一个参数值,这个参数值将取代脚本中的“MD01”,该值包含用户输入的任何4个字符串 问题是,当我做这个简单的创建或替换过程测试时,即使代码在两秒钟前工作,我也会遇到一大堆错误。我做错了什么?下面发布的代码部分功能完美,但我不知道如何正确地将其包装到PL/SQL中的存储过程中 ORA-0094

感谢大家的帮助,我对PL/SQL非常陌生,我发现它的语法比T-SQL更具挑战性。我有一个正常工作的PL/SQL游标,它可以将我想要的内容准确地插入到表中。下一步,我想把它包装在一个存储过程中,这样我就可以传入一个参数值,这个参数值将取代脚本中的“MD01”,该值包含用户输入的任何4个字符串

问题是,当我做这个简单的创建或替换过程测试时,即使代码在两秒钟前工作,我也会遇到一大堆错误。我做错了什么?下面发布的代码部分功能完美,但我不知道如何正确地将其包装到PL/SQL中的存储过程中

ORA-00942:表或视图不存在PLS-00364:循环索引变量 “EACH_REC”用法无效ORA-00984:此处不允许使用列

匿名块:

DECLARE
  <declarations>
BEGIN
  <actions>
END;
可以通过以下方式转换为存储过程:

CREATE OR REPLACE PROCEDURE test IS
  <declarations>
BEGIN
  <actions>
END;
博内斯特是正确的: 默认情况下,authid定义程序不会查看角色以确定是否有必要的权限-相反,授予需要是直接的-即,不是在schema1.table1上将select授予某个角色;将某些_角色授予schema2,必须将schema1.table1上的select授予schema2


我联系了我们的Oracle DBA,他们很快就给了我直接访问权限,并且完整正确地编译了存储过程。非常感谢你,很高兴我没有疯

这不是CREATE或REPLACE语句,所以是实际代码引发了错误?您的代码将源表模式AMIOWN与目标表模式um,schema区分开来。这是否意味着存储过程的所有者与这两个模式中的一个或两个不同?如果是,那么过程如何拥有这些表的特权?如何授予他们选择和/或插入权限?这很重要,因为ORA-00942可能表明存在权限问题。当您可以通过简单地执行insert into 1在一个go aka集合中完成所有工作时,为什么要采用逐行(也称为缓慢-缓慢)的方法?我取出了CREATE或REPLACE语句块,因为它无法正常工作,我想显示所使用的代码。2关于AMIOWN,我只有此架构的SELECT权限,但在架构中我有INSERT权限。3关于以缓慢的方式做这件事,我100%知道!我无法使插入语法正常工作,我认真地尝试了一个多小时,一直得到表/视图不存在错误。我最终得到了这个游标方法,它没有抛出错误,只是在我创建存储过程时它再次中断。听起来像是您,或者更准确地说,拥有您尝试创建的过程的架构具有通过角色授予其他架构的权限。默认情况下,authid定义程序不会查看角色以确定是否有必要的权限-相反,授予需要是直接的-即,不是在schema1.table1上将select授予某个角色;将某些_角色授予schema2,必须将schema1.table1上的select授予schema2。当我更改代码时,用CREATE或REPLACE过程测试替换DECLARE匿名块是我得到的ORA-00942:表或视图不存在错误。除循环索引变量“EACH_REC”外,使用无效错误。
CREATE OR REPLACE PROCEDURE test IS
  <declarations>
BEGIN
  <actions>
END;