Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да хванете грешка във forall plsql

Предполагам, че искате да поставите 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 израз вероятно с DML регистриране на грешки, ако table_data има невалидни данни, които трябва да бъдат регистрирани.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Как ефективно да избирате редове с помощта на списък с ключове

  2. asp.net ядро ​​Oracle.DataAccess System.BadImageFormatException:Не може да се зареди файл или сборка Oracle.DataAccess

  3. Обвързване на OracleCommand SQL параметри

  4. извличане от функция, връщаща референтен курсор за запис

  5. Алтернативи на LIMIT и OFFSET за пейджинг в Oracle