在 table 中的每条记录中创建数据验证的最简单方法是什么?
what are the easiest way to create a data validation in each records in a table?
我最近项目的逻辑是,当用户通过 csv 输入信息时,我的 CTL 文件将从 csv 检索数据到临时 table,我想创建一个 data验证脚本到验证临时table中的每个数据记录,然后再将其传输到主table。
我可能会创建一个程序来获取临时文件 table 的块,检查它们然后将它们插入到基础 table 中。类似于:
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()
替换为您用来确定有效性的任何内容,显然替换为您的 table 和列名称。
我最近项目的逻辑是,当用户通过 csv 输入信息时,我的 CTL 文件将从 csv 检索数据到临时 table,我想创建一个 data验证脚本到验证临时table中的每个数据记录,然后再将其传输到主table。
我可能会创建一个程序来获取临时文件 table 的块,检查它们然后将它们插入到基础 table 中。类似于:
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()
替换为您用来确定有效性的任何内容,显然替换为您的 table 和列名称。