sql >> データベース >  >> RDS >> Oracle

DUP_VAL_ON_INDEXを使用したPL/SQL更新値

    更新の場合、すべてのレコードをループする必要はありません。そのため、予想される 2 ではなく 4 つの更新を取得しています。

    代わりに、DUP_VAL_ON_INDEX の場合にのみ更新する必要があります。 例外と、例外の原因となった行のみ。

    このようなことを試してください。

    DECLARE
        ins NUMBER := 0;
        upd NUMBER := 0;
        CURSOR c1 IS
            SELECT cid
            FROM tbl_cust
            WHERE cid 
            IN ('1','2','3','4');
    BEGIN
        FOR rec IN c1 LOOP
            begin 
               INSERT INTO tbl2 (id_tbl2, name_tbl2)
               VALUES(rec.cid, DECODE(rec.cid, '1', 'A',
                                            '2', 'B',
                                            '3', 'C',
                                            '4', 'D'));
               ins := ins + 1;
            EXCEPTION   WHEN DUP_VAL_ON_INDEX THEN
               UPDATE tbl2 set name_tbl2 = DECODE(rec.cid, '1', 'A',
                                            '2', 'B',
                                            '3', 'C',
                                            '4', 'D'));
               WHERE cust_cust_code = rec.cid;
               upd := upd + 1;
               continue; 
             end;    
        END LOOP;
            dbms_output.put_line('Updated: ' || upd);
            dbms_output.put_line('Inserted: ' || ins);
    END;
    


    1. 一意のvarcharフィールドと一意のbigintのMySQLパフォーマンス

    2. MySQL:Group By&Count複数のフィールド

    3. EMRの外部ハイブメタストア

    4. MAMPmysqlサーバーが起動しません。 mysqlプロセスは実行されていません