gpt4 book ai didi

oracle - 在同一个嵌套表上批量收集两次

转载 作者:行者123 更新时间:2023-12-04 17:11:01 25 4
gpt4 key购买 nike

有没有办法在第二次批量收集之后,数据不会被第一次批量收集覆盖。我不想循环迭代。

    DECLARE
TYPE abc IS RECORD (p_id part.p_id%TYPE);

TYPE abc_nt
IS
TABLE OF abc
INDEX BY BINARY_INTEGER;

v_abc_nt abc_nt;
BEGIN
SELECT p_id
BULK COLLECT
INTO v_abc_nt
FROM part
WHERE p_id IN ('E1', 'E2');

SELECT p_id
BULK COLLECT
INTO v_abc_nt
FROM part
WHERE p_id IN ('E3', 'E4');

FOR i IN v_abc_nt.FIRST .. v_abc_nt.LAST
LOOP
DBMS_OUTPUT.put_line (
'p_id is ' || v_abc_nt (i).p_id
);
END LOOP;
END;

输出:
  • p_id 是 E3
  • p_id 是 E4

  • 注:E1 和 E2 存在于零件表中。

    最佳答案

    您不能简单地将数据添加到集合中,不。

    但是,您可以执行 BULK COLLECT到一个单独的集合中,然后假设您真的只需要/想要一个嵌套表而不是关联数组,然后组合这些集合...

    DECLARE
    TYPE abc IS RECORD (p_id part.p_id%TYPE);

    TYPE abc_nt
    IS
    TABLE OF abc;

    v_abc_nt abc_nt;
    v_abc_nt2 abc_nt;
    BEGIN
    SELECT p_id
    BULK COLLECT
    INTO v_abc_nt
    FROM part
    WHERE p_id IN ('E1', 'E2');

    SELECT p_id
    BULK COLLECT
    INTO v_abc_nt2
    FROM part
    WHERE p_id IN ('E3', 'E4');

    v_abc_nt := v_abc_nt MULTISET UNION v_abc_nt2;

    FOR i IN v_abc_nt.FIRST .. v_abc_nt.LAST
    LOOP
    DBMS_OUTPUT.put_line (
    'p_id is ' || v_abc_nt (i).p_id
    );
    END LOOP;
    END;

    如果您真的想使用关联数组,则需要编写一些代码,因为当您将一个数组与另一个具有某些相同键的关联数组组合时,Oracle 无法自动知道如何重新映射该数组的关联.

    关于oracle - 在同一个嵌套表上批量收集两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382174/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com