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

55

我正在从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来解决这个问题。


1
SQLPLUS参数并不适用于传递大量数据。了解限制很好,但你的问题应该是:如何向SQLPLUS传递大量数据?使用它的参数是错误的答案。但我看到你已经找到了一个解决方案,即SQLLDR。 - tvCa
1
https://dev59.com/kWw15IYBdhLWcg3wFHpZ || http://askubuntu.com/questions/14081/what-is-the-maximum-length-of-command-line-arguments-in-gnome-terminal || http://serverfault.com/questions/163371/linux-command-line-character-limit || http://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument - Ciro Santilli OurBigBook.com
2个回答

89

尝试使用: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行)。


1
谢谢您的回复,但不幸的是,这个RedHat发行版中的xargs命令没有这个标志。 :( - Umber Ferrule
我最接近Redhat的东西是一台运行CentOS 5.4和Linux 2.6.9的VPS。xargs报告“我们实际上可以使用的命令的最大长度为126682”。 - Pablo Castellazzi
9
防止 xargs 在显示限制后挂起的简单方法是使用 echo | xargs --show-limits,这将干净地退出。 - Asclepius
6
@A-B-B FYI:这不是卡住了,只需按Ctrl-D键即可提供它要求的EOF。 - Behrooz
我在另一个评论中问过这个问题,但是让我在这里也问一下。有人如何实际达到这个限制?我以为这也包括将数组传递给函数,即我认为在zsh中会失败print -lf %u {1..3000000},鉴于getconf ARG_MAX 给了我 2097152,而使用xargs --show-limits显示: 我们实际上可以使用的命令的最大长度为2070294 - smac89
显示剩余3条评论

58

我看到了一个问题:"在命令行中,内核可以接受多长的参数列表而不会遇到问题?"

getconf ARG_MAX

在我的系统上,这将产生以下结果:

131072

4
在CentOS 6.2上,2621440是一个数字或参数,具体含义需要根据上下文来确定。 - rogerdpack
7
在Ubuntu Server 14.04 LTS中,“2097152”表示一个文件或目录的默认权限,即所有者和组都有读取和写入权限,其他用户只有读取权限。 - cprcrack
2
在OSX 10.11.2上,262144。 - surj
1
CentOS 7 的值为 2097152。 - haxpor
1
在Ubuntu Server 16.04 LTS上,2097152 - pietrop
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接