在 SQL*Plus 中仅显示实际列数据
我正在从 SQL*Plus 中假脱机分隔文本文件,但每一列都按照其定义打印为完整大小,而不是该行中实际的数据。
例如,定义为 10 个字符的列,行值为“test”,则打印为“test”而不是“test”。我可以通过选择列及其 LENGTH 函数的值来确认这一点。它打印“测试|4”。
如果它迫使我使用固定宽度,那么它就违背了分隔符的目的。是否有一个 SET 选项可以解决这个问题,或者其他一些方法让它只打印实际的列数据。
我不想向每一列添加 TRIM,因为如果一个值实际上存储时带有空格,我希望能够保留它们。
谢谢
I'm spooling out delimited text files from SQL*Plus, but every column is printed as the full size per its definition, rather than the data actually in that row.
For instance, a column defined as 10 characters, with a row value of "test", is printing out as "test " instead of "test". I can confirm this by selecting the column along with the value of its LENGTH function. It prints "test |4".
It kind of defeats the purpose of a delimiter if it forces me into fixed-width. Is there a SET option that will fix this, or some other way to make it print only the actual column data.
I don't want to add TRIM to every column, because if a value is actually stored with spaces I want to be able to keep them.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我见过许多 SQL*plus 脚本,它们创建如下文本文件:
这对我来说是一个强烈的迹象,表明您不能仅使用 SET 命令切换到可变长度输出。
而不是“;”您当然可以使用任何其他分隔符。由您的查询来正确转义任何可能与分隔符或换行符混淆的字符。
I have seen many SQL*plus script, that create text files like this:
It's a strong indication to me that you can't just switch to variable length output with a SET command.
Instead of ';' you can of course use any other delimiter. And it's up to your query to properly escape any characters that could be confused with a delimiter or a line feed.
一般来说,我会忘记 SQL Plus 作为从 Oracle 中获取 CSV 的方法。
Tom Kyte 编写了一个不错的 Pro-C unloader
就我个人而言,我编写了一个实用程序,它的功能类似,但是是用 perl 编写的
Generally, I'd forget SQL Plus as a method for getting CSV out of Oracle.
Tom Kyte has written a nice little Pro-C unloader
Personally I've written a utility which does similar but in perl