使用Oracle光标选择*DISTINCT*,然后批量收集到

使用Oracle光标选择*DISTINCT*,然后批量收集到,oracle,plsql,cursor,bulk,Oracle,Plsql,Cursor,Bulk,请假设我正在使用以下代码: TYPE tb_MY_TABLE IS TABLE OF MY_TABLE%ROWTYPE INDEX BY PLS_INTEGER; tb_c3_MY_TABLE tb_MY_TABLE; CURSOR c3_MY_TABLE ( p3_IDENTIFIER_01 IN VARCHAR2, p3_IDENTIFIER_02 IN V

请假设我正在使用以下代码:

  TYPE tb_MY_TABLE
  IS
     TABLE OF MY_TABLE%ROWTYPE
        INDEX BY PLS_INTEGER;

  tb_c3_MY_TABLE          tb_MY_TABLE;

  CURSOR c3_MY_TABLE (
     p3_IDENTIFIER_01   IN            VARCHAR2,
     p3_IDENTIFIER_02   IN            VARCHAR2
  )
  IS
     SELECT    IDENTIFIER_01,
               IDENTIFIER_02,
               STRING_01,
               STRING_02,
               STRING_03
       FROM   MY_TABLE
      WHERE   MY_TABLE.IDENTIFIER_01 = p3_IDENTIFIER_01
              AND MY_TABLE.IDENTIFIER_02 = p3_IDENTIFIER_02;

  OPEN c3_MY_TABLE (v_IDENTIFIER_01, v_IDENTIFIER_02);

  FETCH c3_MY_TABLE BULK COLLECT INTO   tb_c3_MY_TABLE;

  CLOSE c3_MY_TABLE;

  BEGIN
    FOR v_INDX_TER IN 1 .. tb_c3_MY_TABLE.COUNT

      LOOP
        ----- .....
      END LOOP;

  END;
如果c3_MY_表处于启用状态,我应该如何更改代码?从MY_表中选择不同标识符_01、标识符_02

  CURSOR c3_MY_TABLE (
     p3_IDENTIFIER_01   IN            VARCHAR2,
     p3_IDENTIFIER_02   IN            VARCHAR2
  )
  IS
     SELECT    DISTINCT IDENTIFIER_01,
                        IDENTIFIER_02
       FROM   MY_TABLE
      WHERE   MY_TABLE.IDENTIFIER_01 = p3_IDENTIFIER_01
              AND MY_TABLE.IDENTIFIER_02 = p3_IDENTIFIER_02;

提前感谢您的建议

请像这样更改您的声明(在
DECLARE
块中),您就完成了
DISTINCT
适用于您选择的整行
忽略表中实际列数。它只发生在选择过程之后

CURSOR c3_MY_TABLE (
     p3_IDENTIFIER_01   IN            VARCHAR2,
     p3_IDENTIFIER_02   IN            VARCHAR2
  )
  IS
     SELECT    DISTINCT IDENTIFIER_01,
                        IDENTIFIER_02
       FROM   MY_TABLE
      WHERE   MY_TABLE.IDENTIFIER_01 = p3_IDENTIFIER_01
              AND MY_TABLE.IDENTIFIER_02 = p3_IDENTIFIER_02;


TYPE TY_ROW IS RECORD
(
   IDENTIFIER_01 MY_TABLE.IDENTIFIER_01%TYPE,
   IDENTIFIER_02 MY_TABLE.IDENTIFIER_02%TYPE
);

TYPE TY_TABLE is TABLE OF TY_ROW;

tb_c3_MY_TABLE TY_TABLE;

是否要将输出设置为“通用”的“tb_c3_MY_表”
?或者您希望上一个查询的结果集具有不同的值?我希望结果集具有不同的值。请注意,游标c3只有2个字段,my_表有5个字段。如何修改代码以获得使用select DISTINCT的授权?忽略表中的列,
DISTINCT
将使
resultset
具有不同的值。你不想在其他列中显示数据吗?没错!我不想要剩下的列中的数据,在c3游标中。那么你发布的内容已经很完美了!PLS-00497:不能在声明为单一记录类型的列表中混合使用单行和多行(批量)。这就是为什么。。编辑!谢谢,它是有效的,我为这个疯狂:-)答案被接受了!-)