2

我在 ASP.NET 应用程序中使用 SQLloader 将批量上传数据从 CSV/EXCEL 自动上传到 oracle db。Sqlloader 创建一个日志文件,显示在服务器上创建的导入结果。

我想向我的用户显示一些信息

读了多少行?成功导入多少?在 aspx 页面上

我怎么做?

4

1 回答 1

4

您可以创建一个外部表来读取日志文件。这样做的好处是可以在 SQL 查询中使用外部表。

首先,您需要创建一个目录对象来识别操作系统目录路径。这需要由具有 CREATE ANY DIRECTORY 权限的用户(可能是 DBA 帐户)来完成......

SQL> create or replace directory sqlldr_log_dir as 'C:\your\directory\path'
  2  /

Directory created.


SQL> grant read , write on directory sqlldr_log_dir to apc
  2  /

Grant succeeded.

SQL> 

接下来我们创建表。请注意 location 子句中日志文件的占位符名称....

SQL> create table sqlldr_logfiles (
  2      text_line varchar2(1024)
  3  )
  4  organization external
  5  (
  6      type oracle_loader
  7      default directory sqlldr_log_dir
  8      access parameters
  9          (records delimited by newline
 10              fields (text_line char(1024)
 11          )
 12      )
 13      location ('changeme.log')
 14  )
 15  /

Table created.

SQL>

现在到操作系统进行导入...

C:\temp>imp apc file=apc_20100204.dmp log=apc_20100204.log tables=PTEST6,A

Import: Release 11.1.0.6.0 - Production on Thu Feb 4 11:51:07 2010

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.01.00 via conventional path
import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
. importing APC's objects into APC
. importing APC's objects into APC
. . importing table                            "A"         12 rows imported
. . importing table                       "PTEST6"         19 rows imported
IMP-00009: abnormal end of export file
Import terminated successfully with warnings.

C:\temp>

该目录应该与您之前使用的目录相同。回到 SQL。首先,我们将外部表指向我们之前使用的日志文件,然后从中查询...

SQL> alter table sqlldr_logfiles location ('apc_20100204.log')
  2  /

Table altered.

SQL> select * from sqlldr_logfiles
  2  where text_Line like '. . importing table%'
  3  /

text_Line
--------------------------------------------------------------------------------
. . importing table                            "A"         12 rows imported
. . importing table                       "PTEST6"         19 rows imported

SQL>

格式化输出很容易,特别是如果您有 10g 或更高,因此可以使用 Regex 函数。

于 2010-02-04T12:18:40.720 回答