Plsql id游标中的列无效,尽管我的表具有列id

Plsql id游标中的列无效,尽管我的表具有列id,plsql,oracle10g,oracle-sqldeveloper,Plsql,Oracle10g,Oracle Sqldeveloper,我的表有一个已定义的列id。 虽然同一查询独立运行,但当我尝试在游标中声明它时,它显示无效列 declare type PA_1 is record (PI number); calc number; row_container PA_1; begin for row_container in ( select distict t1.pi , t2.id from table1 t1, table2 t2 where t1.Pi=

我的表有一个已定义的列id。 虽然同一查询独立运行,但当我尝试在游标中声明它时,它显示无效列

declare 
  type PA_1 is record (PI number); 
  calc number; 
  row_container PA_1; 
begin 
  for row_container in 
  (
     select distict t1.pi , t2.id 
     from table1 t1, table2 t2 
     where t1.Pi=t2.pi
  ); 
  Loop 
    select calculation to calc 
    from table1 t1 
    where t1.pi=row_container.pi and t2.id=row_container.id;
  end loop; 
  commit; 
end; 
否则,内部查询运行良好。请帮助解决以下语法错误:

首先,您应该删除row_容器的声明。对于中的行\ u容器,这会导致不正确,并且一列的声明甚至与两列的查询不匹配。 区分应该是不同的。 然后删除循环关键字前的分号。它不属于那里。 然后,“选择计算到计算”应为“选择计算到计算”。 在从表1中选择的循环中,再次调用t1,但where子句包含t2.id,而该查询中没有t2。
然后:这个例行程序应该做什么?它在变量calc中选择一些值,但不使用它。所以一旦它运行,它就什么也不做了。

声明类型PA_1是记录PI编号;计算数;第1排集装箱PA_1;从表1 t1、表2 t2中选择distict t1.pi、t2.id中的行容器开始,其中t1.pi=t2.pi;从表1 t1将select计算循环到calc,其中t1.pi=row\U container.pi和t2.id=row\U container.id;端环;犯罪终止否则,内部查询运行良好。除了我在回答中显示的语法错误之外,您不应该再使用这种旧的连接语法。它在25年前被裁掉了。改为在t1.Pi=t2.Pi上使用from table1 t1内部连接table2 t2。顺便问一下,这个代码块应该做什么?许多任务可以用普通SQL编写,不需要PL/SQL.Hi。。请原谅我的语法错误。。匆忙提交。。代码块是大型表更新的一部分。。我想使用从join获得的值更新列calc。尽管我可以通过将其声明为同义词来删除no列的id问题。。我获取的calc值太多。id是唯一的列。尽管如此,我还是得到了太多的值,但是如果这不是您遇到问题的实际代码,那么发布它是没有意义的。