首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle - PLS-00222

Oracle - PLS-00222
EN

Stack Overflow用户
提问于 2017-03-02 05:43:45
回答 1查看 260关注 0票数 0

我有下面这段返回PLS-00222的代码。因此,我想将“旧”id的日期与从cur_c1检索到的“新”id的日期进行比较。

以下是cur_table记录所在的光标:

代码语言:javascript
复制
    CURSOR table_cur IS
        SELECT
            NEW_ID,
            OLD_ID    
        FROM
            TABLE_C
        WHERE
            C_ID = in_parameter_id; --This is input for the procedure

    CURSOR cur_c1 (c_in_id NUMBER) IS
        SELECT 
               FIELD_DATE
          FROM
               TABLE_D
          WHERE
               FIELD_ID = c_in_id;

  FOR cur_table IN table_cur LOOP
   ...stuff...;

    FOR c_cur IN cur_c1(cur_table.NEW_ID) LOOP
        IF c_cur.field_date > cur_c1(cur_table.OLD_ID).field_date
        THEN
            v_exist := 'Y';
        END IF;
    END LOOP;
   END LOOP;

怎样才能达到我想要的效果?

错误:

代码语言:javascript
复制
2593/56 PLS-00222: no function with name 'cur_c1' exists in this scope
2593/17 PL/SQL: Statement ignored
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 07:16:22

我建议在这里使用游标是低效的。相反,我的建议如下:

代码语言:javascript
复制
FOR cur_table IN table_cur LOOP
  ...stuff...;


  SELECT d_old.FIELD_DATE,
         d_new.FIELD_DATE
    INTO dtOld_field_date,
         dtNew_field_date
    FROM DUAL
    LEFT OUTER JOIN TABLE_D d_old
      ON d_old.FIELD_ID = cur_table.OLD_ID
    LEFT OUTER JOIN TABLE_D d_new
      ON d_new.FIELD_ID = cur_table.NEW_ID;

  IF dtNew_field_date > dtOld_field_date THEN
    v_exist := 'Y';
  END IF;
END LOOP;

祝你好运。

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

https://stackoverflow.com/questions/42542663

复制
相关文章

相似问题

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