首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Plsql包错误

Plsql包错误
EN

Stack Overflow用户
提问于 2020-01-10 04:47:19
回答 1查看 42关注 0票数 0

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

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2020-01-10 05:25:59

您的语法是正确的。

下面的测试代码可以在空模式中正常工作:

代码语言:javascript
复制
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_reviewst_uar_cases的方案中创建包,或者在对表具有直接SELECT权限(而不是通过角色)的方案中创建包。
  • 确保包中引用的所有列都存在于表中。

如果这些都完成了,它应该可以工作。

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

代码语言:javascript
复制
for r in Rev_cur loop
  for c in Case_cur(r.review_id) loop
    ...do something..
  end loop;
end loop;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59671869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档