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

エラーをforallplsqlにキャッチする方法

    save exceptionsしたいと思います bulk collectで 。

    DECLARE
      TYPE dataDate IS TABLE OF DATE;
      l_dataDate dataDate;
    
      dml_errors EXCEPTION;
      PRAGMA exception_init(dml_errors, -24381);
    BEGIN
      select data1 
        BULK COLLECT INTO l_dataDate 
        from USER.TABLE_DATA;
    
    BEGIN
      FORALL i IN l_dataDate.FIRST..l_dataDate.LAST SAVE EXCEPTIONS
        INSERT INTO USER.DIMDATE 
          SELECT
              to_number(to_char(l_dataDate(i), 'YYYYMMDDHH24MISS')),
              to_number(to_char(l_dataDate(i), 'YYYYMMDD')),
              l_dataDate(i),
              to_number(to_char(l_dataDate(i), 'DD')),
              to_char (l_dataDate(i), 'Day'),
              to_number(to_char (l_dataDate(i), 'MM')),
              to_char (l_dataDate(i), 'Month'),
              to_number(to_char(l_dataDate(i), 'YYYY'))  
         FROM DUAL
        WHERE NOT EXISTS (SELECT 1 
                            FROM USER.DIMDATE 
                           WHERE COD_FECHA=to_number(
                                             to_char(l_dataDate(i), 
                                                     'YYYYMMDDHH24MISS'))); 
    EXCEPTION 
      WHEN dml_errors
      THEN
        FOR i IN 1..sql%bulk_exceptions.count
        LOOP
          <<do something with the exceptions>>
        END LOOP;
    END;
    

    ただし、このような場合、PL/SQLを使用する理由はまったくないようです。単一のINSERTを書くだけです table_dataの場合、DMLエラーログを伴う可能性のあるステートメント ログに記録する必要のある無効なデータがあります。




    1. Oracle Sql Check Constraint !=他のテーブル

    2. リソースID#5:MySQL

    3. PHPで動的に割り当てられた値を$_POSTする方法は?

    4. SQL Serverカーソルリファレンス(構文など)