可以传递给 SQL*Plus 的命令行参数的最大长度?

Posted

技术标签:

【中文标题】可以传递给 SQL*Plus 的命令行参数的最大长度?【英文标题】:Maximum length of command line argument that can be passed to SQL*Plus? 【发布时间】:2011-10-14 08:19:09 【问题描述】:

我正在从 Linux C Shell 调用 SQL*Plus:

sqlplus username/password @file.sql var1 var2 var3

如果我传递一个字符串为var1,这个字符串可以有多长?

它受操作系统管理吗?在这种情况下:

Linux version 2.6.9-100.ELsmp (mockbuild@x86-010.build.bos.redhat.com) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)) #1 SMP Tue Feb 1 12:17:32 EST 2011

更新:实证测试得出以下结果:

5200 个字符的命令行参数给出了错误“字太长”。 1300 个字符然后产生 SQL*Plus 错误,“字符串开头“(000796384...”太长。最大大小为 239 个字符。” 当我得到低于 239 个字符时,一切都很好。

我想我会使用sqlldr 来解决这个问题。

【问题讨论】:

SQLPLUS 参数并非旨在传递大量数据。很高兴知道限制是什么,但您的问题应该是:如何将大量数据传递给 SQLPLUS?使用它的参数,是错误的答案。但我看到你找到了一种解决方案,就是 SQLLDR。 ***.com/questions/6846263/… || askubuntu.com/questions/14081/… || serverfault.com/questions/163371/… || unix.stackexchange.com/questions/120642/… 【参考方案1】:

尝试:xargs --show-limits </dev/null

Your environment variables take up 2446 bytes
POSIX upper limit on argument length (this system): 2092658
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2090212
Size of command buffer we are actually using: 131072

每个参数没有限制,而是整个命令行长度的总和。在我的系统(Fedora 15/zsh)中,它接近 2Mb。 (第 4 行)。

【讨论】:

感谢您,但不幸的是,此 RedHat 发行版中的 xargs 没有此标志。 :( 我拥有的最接近 redhat 的是带有 CentOS 5.4 和 linux 2.6.9 的 vps。 xargs 报告Maximum length of command we could actually use: 126682. 仅供参考:防止xargs在显示限制后挂起的简单方法是使用echo | xargs --show-limits。它会干净利落地退出。 @A-B-B 仅供参考:这不是挂起,只需按 Ctrl-D 即可为其提供所需的 EOF。 有谁知道引号是否计入参数长度的限制,还是仅仅是参数本身的内容?例如,如果参数长度的限制为 10,那么 /bin/echo "0123456789" 是否会限制,或者 两个字节由于引号引起的限制?【参考方案2】:

我遇到了“您的内核在阻塞之前可以在命令行上占用多长时间的参数列表?”:

getconf ARG_MAX

在我的系统上提供以下内容:

131072

【讨论】:

2621440 在 CentOS 6.2 上 2097152 在 Ubuntu Server 14.04 LTS 中 262144 在 OSX 10.11.2 2097152 适用于 CentOS 7 2097152 在 Ubuntu Server 16.04 LTS 上

以上是关于可以传递给 SQL*Plus 的命令行参数的最大长度?的主要内容,如果未能解决你的问题,请参考以下文章

使用文本文件,其中每一行都是要传递给 SQL*Plus 的参数

当程序路径包含空格时,SQL*plus 不会正确标记其命令行参数

如何将参数从 bat 文件或命令行传递给 plpgsql 函数?

将文件的内容作为参数传递给 Sql*Plus 命令

SQL Plus和PL/SQL

如何将命令行参数从pytest传递给代码