使用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:不能在声明为单一记录类型的列表中混合使用单行和多行(批量)。这就是为什么。。编辑!谢谢,它是有效的,我为这个疯狂:-)答案被接受了!-)