首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要一次对shell脚本中的两个Oracle DB执行一个sql查询,并将数据导出到单独的csv文件

问需要一次对shell脚本中的两个Oracle DB执行一个sql查询,并将数据导出到单独的csv文件
EN

Stack Overflow用户
提问于 2020-07-28 21:57:03
回答 2查看 51关注 0票数 0

我有file1.sh文件,它需要在内部同时对两个Oracle dbs执行一个sql查询,并且需要将日期导出到csv文件,下面是对两个DBs执行查询的示例外壳脚本。

代码语言:javascript
复制
    ....
    #!bin/bash
set -X
        sqlplus -S ${user1}@${DBCONNECTIONNAME_1}/${Pwd} Datesquery.sql & >> ${Targetdirectory}/csvfile1.csv
                         sqlplus -S ${user1}@${DBCONNECTIONNAME_2}/${Pwd} Datesquery.sql & >> ${Targetdirectory}/csvfile2.csv
                         sed 1d csvfile2.csv > file2noheader.csv
                         cat csvfile1.csv file2noheader.csv > ${Targetdirectory}/Expod.csv
    ....

但是它没有连接到DB,也不执行任何查询,只是简单地显示sqlplus手册如何使用连接字符串,请让我知道如何对两个数据库调用一个查询,并在parrallay中执行它们,并将输出绑定到单独的csv文件。

EN

回答 2

Stack Overflow用户

发布于 2020-07-28 22:44:10

给定的sqlplus会话一次只能连接到一个数据库,因此您的“同时”需求本质上是不可能实现的。如果“在同一时间”真的意味着“在相同的脚本中按顺序”,那么你又回到了修复你的连接字符串。在这一点上,你“比大都会早期的比赛有更多的错误”(向所有纽约大都会的球迷道歉)。

首先,脚本指出sqlplus命令是指定shell处理器和'set -x‘之后的第一个实际命令。然而,您大量使用环境变量来替代用户名、密码和连接名称,而没有设置这些变量。

其次,您在命令行中使用'&‘完全使我和解析器感到困惑。

第三,您需要在引用sql脚本之前加上“@”。

第四,命令行中元素的顺序都是错误的。

尝尝这个

代码语言:javascript
复制
#!/bin/bash
orauser1=<supply user name here>
orapw2=<supply password here>
oradb_1=<supply connection name of first database>
#
orauser1=<supply user name here>
orapw2=<supply password here>
oradb_1=<supply connection name of first database>
#
Targetdirectory=<supply value here>
#
sqlplus -S ${orauser1}/${orapw1}@${oradb_1} @Datesquery.sql >> ${Targetdirectory}/csvfile1.csv

sqlplus -S ${orauser2}/${orapw2}@${oradb_1} @Datesquery.sql >> ${Targetdirectory}/csvfile2.csv
票数 1
EN

Stack Overflow用户

发布于 2020-07-30 05:55:05

或者创建一个从一个数据库到另一个数据库的数据库链接,然后在一个数据库中运行两个sqls,一个通过数据库链接。

select * from tab1 union select * from tab1@db_link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63135837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档