sql >> Databáze >  >> RDS >> Oracle

Jak zachytit chybu do forall plsql

Předpokládal bych, že chcete vložit save exceptions ve vašem 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;

Pro něco takového se však zdá, že není důvod používat PL/SQL vůbec. Stačí napsat jeden INSERT příkaz pravděpodobně s protokolováním chyb DML if table_data má neplatná data, která je třeba zaprotokolovat.




  1. Návratová hodnota uložené procedury MySQL

  2. Použití PHPExcel k automatickému vytváření souborů Excel

  3. Jak používat uživatelské proměnné v klauzuli LIKE MySQL?

  4. Jak číst obrázky z databáze MySQL pomocí PHP?