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

从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客户端库"应该做到这一点...


推荐阅读

    linux文件常用命令?

    linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

    文件夹排序linux命令?

    文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

    linux文本查询命令?

    linux文本查询命令?,标准,命令,文件,工具,数据,信息,位置,系统,内容,文本,Lin

    压缩文件夹命令linux?

    压缩文件夹命令linux?,系统,软件,命令,工具,电脑,文件,文件名,格式,选项,目

    linux管理文件的命令?

    linux管理文件的命令?,系统,管理,工作,命令,信息,基础,目录,工具,文件,操作,l

    linux退出文件命令行?

    linux退出文件命令行?,状态,档案,命令,电脑,编辑,文件,模式,界面,指令,键盘,l

    linux文件io命令?

    linux文件io命令?,系统,设备,时间,地址,平均,信息,服务,工具,报告,网络,嵌入

    改文件linux命令行?

    改文件linux命令行?,地址,系统,工作,信息,数字,文件,命令,设备,密码,权限,lin

    拷贝文件夹linux命令?

    拷贝文件夹linux命令?,系统,地址,服务,信息,密码,情况,单位,项目,命令,文件,l

    进入文件夹linux命令?

    进入文件夹linux命令?,系统,密码,终端,目录,标的,一致,传播,图片,环境,工作,l

    d文件比较命令linux?

    d文件比较命令linux?,工作,系统,命令,地址,文件,信息,对比,数字,名称,一致,Li

    linux命令行文件夹?

    linux命令行文件夹?,系统,名称,文件夹,不了,命令,文件,名字,通用,数据,首次,l

    打包文件命令linux?

    打包文件命令linux?,系统,时间,工具,名称,命令,文件,目录,格式,表示,详细信

    linux删除命令文件夹?

    linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名

    linux压缩文本的命令?

    linux压缩文本的命令?,系统,图片,命令,设备,工具,位置,软件,管理,文件,目录,

    linux命令文件授权?

    linux命令文件授权?,系统,工具,权限,文件,档案,数字,软件,信息,时间,电脑,lin

    linux文件io命令?

    linux文件io命令?,系统,设备,时间,地址,平均,信息,服务,工具,报告,网络,嵌入

    linux中文件编辑命令?

    linux中文件编辑命令?,系统,工作,工具,信息,地址,发行,命令,第一,检测,基础,l

    linux文件格式的命令?

    linux文件格式的命令?,设备,命令,系统,文件,标准,代码,情况,电脑,平台,数据,l

    linux命令行编译文件?

    linux命令行编译文件?,代码,系统,项目,工具,网上,手机,电脑,地址,官网,文件,L