首页 > 解决方案 > 在表中的每条记录中创建数据验证的最简单方法是什么?

问题描述

我最近项目的逻辑是,当用户通过 csv 输入信息时,我的 CTL 文件会将数据从 csv 检索到临时表,我想创建一个数据验证脚本验证临时表中的每个数据记录,然后再将其传输到主表。

标签: sqlbashoracle11gshoracle-sqldeveloper

解决方案


我可能会创建一个程序来抓取临时表的块,检查它们,然后将它们插入基表中。就像是:

DECLARE
  TYPE lt_toValidate IS TABLE OF temp_table%ROWTYPE INDEX BY PLS_INTEGER;
  
  lc_fetchLimit CONSTANT INTEGER := 5000;
  l_tToVal lt_toValidate;
  
  CURSOR c_toVal IS
    SELECT *
    FROM temp_table;
BEGIN
  OPEN c_toVal;
  LOOP
    FETCH c_toVal
    BULK COLLECT INTO l_tToVal
    LIMIT lc_fetchLimit;
    
    EXIT WHEN l_tToVal.COUNT = 0;
    
    FOR i IN 1..l_tToVal.COUNT LOOP
      IF NOT(is_record_valid()) THEN
        l_tToVal.DELETE(i);
      END IF;
    END LOOP;
    
    FORALL i IN INDICES OF l_tToVal
      INSERT INTO base_table (col1, col2, col3) VALUES (l_tToVal(i).col1, l_tToVal(i).col2, l_tToVal(i).col3);
  END LOOP;
END;
  

您只需要替换is_record_valid()为您用来确定有效性的任何内容,并且显然替换为您的表和列名称。


推荐阅读