首页 / 知识

从oracle数据库中以CSV文件(或任何其他自定义文本格式)获取数据

2023-04-15 12:22:00

从oracle数据库中以CSV文件(或任何其他自定义文本格式)获取数据

Getting data from an oracle database as a CSV file (or any other custom text format)

一个连接到Oracle数据库,执行简单的SELECT查询并将结果以CSV格式输出到stdout的示例perl脚本将是不错的选择。 Python或典型的unix发行版中可用的任何其他语言也可以。

请注意,我从头开始,只不过是远程Oracle数据库的用户名/密码。除了拥有正确的oracle连接库之外,还有其他功能吗?

如果有一种方法可以直接在mathematica中进行,那将是理想的(大概可以通过J / Link实现(mathematica的java集成))。


如何从sqlplus创建文件一样简单...

1
2
3
4
5
set echo off heading off feedback off colsep ,;
spool file.csv;
select owner, table_name
from all_tables;
spool off;

这是Python中的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import cx_Oracle, csv

orcl = cx_Oracle.connect('ohd/john@ohddb')
curs = orcl.cursor()

csv_file_dest ="C:\\\\test.csv"

output = csv.writer(open(csv_file_dest,'wb'))

sql ="select * from parameter"

curs.execute(sql)

headers_printed = False
for row_data in curs:        
    if not headers_printed:
        cols = []
        for col in curs.description:
            cols.append(col[0])
        output.writerow(cols)
        headers_printed = True

    output.writerow(row_data)

在perl中,您可以执行以下操作,省去我所有的本地变量声明,然后...或者为简洁起见而死于" failmessage"错误处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use DBI;
use DBD::Oracle;

$dbh = DBI->connect("dbi:Oracle:host=127.0.0.1;sid=XE","username","password" );

# some settings that you usually want for oracle 10
$dbh->{LongReadLen} = 65535;
$dbh->{PrintError} = 0;    

$sth = $dbh->prepare("SELECT * FROM PEOPLE");

$sth->execute();

# one example for error handling just to show how it's done in principle
if ( $dbh->err() ) { die $dbh->errstr(); }

# you can also do other types of fetchrow, see perldoc DBI
while ( $arrayref = $sth->fetchrow_arrayref ) {
    print join";", @$arrayref;
    print"\
";
}

$dbh->disconnect();

有两个注释,因为人们在评论中问:

  • sid = XE是oracle服务ID,类似于您的数据库名称。如果安装免费版本的oracle,则默认为" XE",但可以对其进行更改。
  • 安装DBD :: Oracle需要系统上的oracle客户端库。安装该文件还将设置所有必要的环境变量。

正如dreeves所说,DatabaseLink使这个琐碎。我不知道的部分是JDBC声明的详细信息。但是这是MySQL的外观:

然后从Mathematica内部进行:

1
2
3
Needs["DatabaseLink`"]
conn = OpenSQLConnection[JDBC["mysql","hostname/dbname"], Username->"user", Password->"secret"]
Export["file.csv", SQLSelect[conn,"MyTable"]]

您当然可以先将SQLSelect分配给变量并检查它。这将是保存表数据的列表的列表。您可以将条件传递给SQLSelect,请参阅该文档的文档(例如SQLColumn [" Name"] ==" joeuser")。

Oracle唯一的问题是如何使用JDBC表达式建立连接。它可能类似于JDBC [" oracle"," hostname / dbname"]。


我不是PERL程序员,但是您可能需要研究一下一些额外的功能。看一下Oracle中外部表的概念。您创建一个表,该表的定义类似于以下内容:-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE MY_TABLE
(
  COL1    NUMBER(2),
  COL2  VARCHAR2(20 BYTE)
)
ORGANIZATION EXTERNAL
  (  TYPE ORACLE_LOADER
     DEFAULT DIRECTORY SOME_DIRECTORY_NAME
     ACCESS PARAMETERS
       ( FIELDS TERMINATED BY ','
         MISSING FIELD VALUES ARE NULL
       )
     LOCATION (SOME_DIRECTORY_NAME:'my_file.csv')
  )
REJECT LIMIT UNLIMITED;

请注意,此DDL语句假定您已经创建了一个名为" SOME_DIRECTORY_NAME"的目录。然后,您可以发出DML命令以将数据移入或移出该表,并且一旦完成提交,数据my_file.csv中的数据就非常整洁。之后,请执行PERL魔术操作,以将文件放置在所需的位置。


获取Oracle Application Express。这是基于浏览器的工具,数据库附带了该工具。它使您可以快速将报表一起单击并指定CSV(或Excel)作为输出格式。 (您也可以使用它来构建完整的应用程序)。

您可以在这里找到大量的文档,演示等:
http://apex.oracle.com

您也可以从此URL下载该工具,或者可以注册一个免费的工作区并在Oracle服务器上使用该工具。


Mathematica内置有一个软件包" DatabaseLink",该软件包应该使此操作变得容易,但是您需要找到Oracle的驱动程序。安装" oracle客户端库"应该做到这一点...


数据库文本自定义文件

最新内容

相关内容

猜你喜欢