使用 Export-CSV 将 sqlplus 查询结果导出到 CSV

Posted

技术标签:

【中文标题】使用 Export-CSV 将 sqlplus 查询结果导出到 CSV【英文标题】:Export sqlplus query result to CSV with Export-CSV 【发布时间】:2013-04-19 18:48:25 【问题描述】:

我正在 Powershell 2.0 中的 SQLPLUS 中运行一些查询

我想使用 Export-CSV 将表格的内容输出到 csv。 它看起来像这样。

$query = "set hea off`n"

$date1 = "ADD_MONTHS(TRUNC(SYSDATE, 'MM'),-3))"

$query += "DROP TABLE CHRIS_TEMP;CREATE TABLE CHRIS_TEMP AS SELECT FIELDS FROM TABLES;
exit;"

$sqlexec = ($query | sqlplus -s login/pass@db)

$sqlexec

$export= ("set wrap off 
set linesize 30000
select * from CHRIS_TEMP;" | sqlplus -s login/pass@db ) 
$export | Export-Csv   c:\users\*****\test.csv -notypeinformation

但输出都是一个单一的字段。 任何人都可以帮助解决这个问题吗?我不希望在 sqlplus 中输出 CSV。

【问题讨论】:

$export 在屏幕上打印时是什么样的? 【参考方案1】:

问题在于没有分隔符 Powershell 不知道您的数据的结构。只要加了逗号,就变得很容易处理了。

否则,您将返回尝试解析数据,因为空白列与尾随空格看起来不会有太大不同。

与使用 SQL plus 相比,使用直接连接到数据库会给您带来更大的灵活性。您的数据将保存在结构化记录中,您可以随意使用。

当我确实在 powershell 脚本中使用 SQLPlus 时,我使用文件片段以编程方式编写 SQL 脚本以简化代码,并将其发送到 sqlplus,而不是将 SQL 本身通过管道传输到 SQLPLUS。这使得添加这样的命令变得容易 收起, 和其他格式化命令。

【讨论】:

我切换到直接连接并填满了一个工作表,使用上面的 nimizen 方法导出。你们俩都帮了我很大的忙。【参考方案2】:

目前无法对此进行测试,但请尝试通过管道将您的 $export 传递给 Select-Object:

$export | 
    Select-Object Column1, Column2, etc | 
    Export-Csv   c:\users\*****\test.csv -notypeinformation

【讨论】:

感谢您回复我,这将输出一个仅包含标题的 CSV。但是,我将它与 marceljg 的答案结合起来,通过删除 SQLPLUS 部分并直接连接来获得我需要的东西 感谢您对解决方案的反馈,很高兴这对您有所帮助!

以上是关于使用 Export-CSV 将 sqlplus 查询结果导出到 CSV的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell Export-Csv 导出与导入CSV文件

PowerShell Import-CSV“过滤掉空行”Export-CSV

如何在sqlplus中查看库中都有哪些表

解决 SQLPlus无法登陆oracle,PLSql可以登陆,报错ORA-12560

ORACLE学习03-SQLPLUS常用命令和数据类型

(转)sqlplus中文显示乱码的问题