Plsql包错误

Plsql包错误,plsql,Plsql,下面的代码出现了许多错误。只是想检查一下我的代码语法是否正确。包背后的主要逻辑是获取所有案例以供特定审查,并使用shell脚本将其假脱机到一个文件中。到目前为止,我的注意力集中在包装上 create or replace PACKAGE BODY PK_FCP_EXTRACT is PROCEDURE sp_fcp_extract is cursor Rev_cur is select * from t_uar_reviews where CREATED_DATE=trunc(s

下面的代码出现了许多错误。只是想检查一下我的代码语法是否正确。包背后的主要逻辑是获取所有案例以供特定审查,并使用shell脚本将其假脱机到一个文件中。到目前为止,我的注意力集中在包装上

create or replace PACKAGE BODY  PK_FCP_EXTRACT is

PROCEDURE sp_fcp_extract is

     cursor Rev_cur is select * from t_uar_reviews where CREATED_DATE=trunc(sysdate) ;
       r Rev_cur%rowtype;
      cursor case_cur( c_revid IN t_uar_reviews.review_id%type )
          is select *
               from t_uar_cases where review_id= c_revid ;
     c case_cur%rowtype;
   begin
    open Rev_cur;
    loop
       fetch Rev_cur into r;
       exit when Rev_cur%notfound;
       open case_cur( r.review_id );
       loop
         fetch case_cur into c;
         exit when case_cur%notfound;
         dbms_output.put_line(c.UAR_CASE_ID||','||c.UAR_REVIEW_ID||','||c.CASE_TYPE||','||c.CASE_NMBR||','||c.ACTIVE_FLAG||','|| c.CREATED_DATE);
       end loop;
       close case_cur;
     end loop;
     close Rev_cur;
  end;

END PK_FCP_EXTRACT;


你的语法是正确的

以下测试代码在空架构中正常工作:

create table t_uar_reviews(
  review_id number,
  created_date date
)
/
create table t_uar_cases(
  review_id number,
  UAR_CASE_ID number,
  UAR_REVIEW_ID number,
  CASE_TYPE varchar2(10),
  CASE_NMBR number,
  active_flag varchar2(1),
  created_date date)
/

create package PK_FCP_EXTRACT is
  PROCEDURE sp_fcp_extract;
end;
/

create or replace PACKAGE BODY  PK_FCP_EXTRACT is

PROCEDURE sp_fcp_extract is

     cursor Rev_cur is select * from t_uar_reviews where CREATED_DATE=trunc(sysdate) ;
       r Rev_cur%rowtype;
      cursor case_cur( c_revid IN t_uar_reviews.review_id%type )
          is select *
               from t_uar_cases where review_id= c_revid ;
     c case_cur%rowtype;
   begin
    open Rev_cur;
    loop
       fetch Rev_cur into r;
       exit when Rev_cur%notfound;
       open case_cur( r.review_id );
       loop
         fetch case_cur into c;
         exit when case_cur%notfound;
         dbms_output.put_line(c.UAR_CASE_ID||','||c.UAR_REVIEW_ID||','||c.CASE_TYPE||','||c.CASE_NMBR||','||c.ACTIVE_FLAG||','|| c.CREATED_DATE);
       end loop;
       close case_cur;
     end loop;
     close Rev_cur;
  end;

END PK_FCP_EXTRACT;
可能的故障原因:

确保已先创建包,然后再创建包规范 确保在拥有t_uar_审查和t_uar_案例的架构中创建包,或者在表上具有直接选择授权(而不是通过角色)的架构中创建包。 确保包中引用的所有列都存在于表中。 如果这些都完成了,它应该会起作用

为了简化操作,请尝试对光标循环使用以下替代语法:

for r in Rev_cur loop
  for c in Case_cur(r.review_id) loop
    ...do something..
  end loop;
end loop;

通过使用此方法,您不需要定义记录r或c;它们是隐式创建的,您不需要打开/获取/检查/关闭游标。

有哪些详细错误?问题并添加消息。错误6,7:PL/SQL:Item忽略错误6,49:PLS-00302:组件“REVIEW_ID”必须声明为错误9,8:PLS-00320:此表达式类型的声明不完整或格式错误9,8:PL/SQL:Item忽略错误15,8:PL/SQL:SQL语句忽略请将错误添加到问题中,以便其他人可以看到很容易,我犯了个错误。我给的列名不正确。谢谢你的回复。我很感激。我还建议将两个游标组合成一个带有连接的结果集。当前代码有效地加入了PL/SQL,这将很慢。