Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để bắt một lỗi trong forall plsql

Tôi giả sử rằng bạn muốn đặt một save exceptions trong bulk collect của bạn .

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;

Tuy nhiên, đối với những thứ như thế này, dường như không có lý do gì để sử dụng PL / SQL cả. Chỉ cần viết một INSERT duy nhất câu lệnh có thể có ghi lỗi DML if table_data có dữ liệu không hợp lệ cần được ghi lại.




  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 SQL Developer - Cửa sổ kết quả truy vấn bị thiếu lưới

  2. Kết nối JDBC với cơ sở dữ liệu Oracle bằng Chứng chỉ TLS

  3. Làm thế nào để thực hiện kết nối trái trong Ngôn ngữ truy vấn Hibernate?

  4. Truy vấn SQL DIFFDATE trả về số nhận dạng không hợp lệ

  5. Tối ưu hóa truy vấn:DBMS_METADATA.GET_DDL (Oracle)