【问题标题】:what are the easiest way to create a data validation in each records in a table? [closed]在表中的每条记录中创建数据验证的最简单方法是什么? [关闭]
【发布时间】:2021-10-19 21:47:48
【问题描述】:

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

【问题讨论】:

  • 这个问题与bashsh 有什么关系?如果我理解正确,您正在寻找 PL/SQL 解决方案; 如果涉及到一个shell,请说明你是指bash还是sh。

标签: sql bash oracle11g sh oracle-sqldeveloper


【解决方案1】:

我可能会创建一个获取临时表块、检查它们然后将它们插入基表的过程。比如:

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() 替换为您用来确定有效性的任何内容,并且显然替换为您的表和列名称。

【讨论】:

  • 你好,请问第 2 行的“INDEX BY PLS_INTEGER”的目的是什么?
  • @BROX 它只是使用关联数组而不是嵌套表。我总是将此参考用于收藏 (Oracle Documentation)
  • @brox 在这种情况下,我可以不使用该子句并使用嵌套表。这只是我的 goto。
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 2012-07-04
  • 2013-02-18
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多