Oracle SQL - table 键入游标导致 ORA-21700: 对象不存在或被标记为删除

Oracle SQL - table type in cursor causing ORA-21700: object does not exist or is marked for delete

我的函数有问题,我收到 ORA-21700: 对象不存在或标记为删除 错误。这是由游标中的 table 类型参数引起的,但我不知道如何解决它。 我读到 table 类型部分应该分配给一个变量,但它不能在游标中完成,对吗?我已经标记了导致问题的部分

有人可以帮忙吗?我还有其他方法可以做到这一点吗?

我的包裹看起来像这样:

 FUNCTION createCSV(DateFrom  date
                    ,DateTo    date) 
    RETURN clob IS
    
    CURSOR c_id (c_DateFrom  date
                ,c_DateTo    date) IS
      SELECT id
        FROM limits
       WHERE utcDateFrom <= NVL(c_DateTo, utcDateFrom)
         AND NVL(utcDateTo, c_DateFrom + 1) >= c_DateFrom + 1; 
    
    CURSOR c (c_DateFrom  date
             ,c_DateTo    date
             ,pc_tDatePeriods test_pkg.t_date_periods) IS -- this is table type (TYPE xx AS TABLE OF records)
        SELECT l.id                                                limit_id  
              ,TO_CHAR(time_cond.utcDateFrom, og_domain.cm_yyyymmddhh24mi) time_stamp_from  
              ,TO_CHAR(time_cond.utcDateTo, og_domain.cm_yyyymmddhh24mi)   time_stamp_to             
          FROM limits l     
          JOIN (SELECT limit_id, utcDateFrom, utcDateTo FROM TABLE(pc_tDatePeriods) --This part is causing the issue
               ) time_cond
            ON l.id = time_cond.limit_id
         WHERE l.utcDateFrom <= NVL(c_DateTo, l.utcDateFrom)
           AND NVL(l.utcDateTo, c_DateFrom + 1) >= c_DateFrom + 1;
        
    CSV           clob;  
    tDatePeriods  test_pkg.t_date_periods := test_pkg.t_date_periods();
  BEGIN
    FOR r_id IN c_id(DateFrom, DateTo)
    LOOP
      tDatePeriods := test_pkg.includeTimeGaps(p_Id => r_id.id); --this loop is ok
      
      FOR r IN c(DateFrom, DateTo, tDatePeriods) --here I'm getting error
      LOOP
        CSV := CSV || chr(13) || r.limit_id || ',' || r.time_stamp_from || ',' || r.time_stamp_to;
      END LOOP;
      
    END LOOP;
    
    RETURN CSV;   
  END createCSV;  

您的问题应该通过在架构级别而不是在包中声明类型 test_pkg.t_date_periods 来解决。

可以找到类似的答案 here,但有更多详细信息。