1

我们有一个学生表,其中 student_id 整数、名称 varchar 和年龄作为列。我们使用 oracle 作为我们的 dbms。我们从平面文件中获取数据并使用 sql 加载器加载数据。因此,在加载时,由于记录重复等原因,我们会遇到异常。为了确定我们考虑设计分析仪。为此,我们设计了一个包含相同列的副本表,但所有列都是 varchar。所以首先我们将数据加载到分析器表中,然后我们识别记录。由于分析器表带有 varchar 列,因此它可以使用任何类型的数据,例如甚至 student_id 字段的文本。是否有可能通过 sql 查询来识别这些记录?

4

2 回答 2

2

更好的方法可能是根据您当前使用 SQL*Loader 上传的文件定义一个外部表,并将其视为“分析器”表。识别重复项的方法将使用标准 SQL 语法,并且取决于您是否在新数据集中以及新旧数据集之间是否存在必须检查的重复项。如果只有后者,那么 MERGE 语句对于此目的非常有效。

不确定 varchar 的想法——除非文件中有损坏的数据,否则我看不出它有什么作用。

于 2013-01-02T11:37:50.540 回答
1

如何使用 LOG ERRORS ?例如:

首先创建表来保存错误....

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;
于 2013-01-02T13:10:48.787 回答