我们有一个学生表,其中包含student_id整数,名称varchar和age作为列。我们使用oracle作为我们的dbms。我们从平面文件中获取数据并使用sql loader加载数据。因此,在加载时,由于重复记录等原因,我们会遇到异常。确定我们考虑设计分析仪。为此,我们设计了一个包含相同列的副本表,但所有列都是varchar。首先,我们在分析器表中加载数据,然后识别记录。由于分析器表具有varchar列,因此它可以使用任何类型的数据,例如甚至student_id字段的文本。是否有可能通过SQL查询识别这些记录?
答案 0 :(得分:2)
更好的方法可能是根据您当前使用SQL * Loader上传的文件定义外部表,并将其视为“分析器”表。识别重复项的方法将使用标准SQL语法,并取决于您是否在必须检查的新数据集中以及旧数据集和新数据集之间存在重复项。如果只有后者,则MERGE语句对此非常有效。
不确定varchar的想法 - 除非你在文件中有corrput数据,否则我看不出它有什么贡献。
答案 1 :(得分:1)
如何使用LOG ERRORS? e.g:
首先创建表来保存错误....
DBMS_ERRLOG.CREATE_ERROR_LOG('STUDENT');
接下来sqlload将数据导入到tmp表中, 然后运行一个plsql例程来加载数据.....
INSERT INTO student
SELECT to_number(ts.student_id), name, to_number(age)
FROM tmp_student ts
LOG ERRORS
REJECT LIMIT UNLIMITED;
要查看错误:
SELECT * FROM err$_student;