Oracle 中 varchar2 PL/SQL 子程序参数的大小限制是多少?

Posted

技术标签:

【中文标题】Oracle 中 varchar2 PL/SQL 子程序参数的大小限制是多少?【英文标题】:What is the size limit for a varchar2 PL/SQL subprogram argument in Oracle? 【发布时间】:2008-10-09 08:26:10 【问题描述】:

在 Oracle PL/SQL 中创建过程(或函数)时,不能指定 varchar2 参数的最大长度,只能指定数据类型。例如

create or replace procedure testproc(arg1 in varchar2) is
begin
  null;
end;

您知道可以作为 arg1 参数传递给 Oracle 中此过程的字符串的最大长度吗?

【问题讨论】:

【参考方案1】:

在 PL/SQL 过程中可能高达 32KB

更多信息在这里: http://it.toolbox.com/blogs/oracle-guide/learn-oracle-sql-and-plsql-datatypes-strings-10804

【讨论】:

不完全是,真正的限制是 32767 字节,即 32KB - 1。正确答案是:***.com/a/22060657/480894【参考方案2】:

我尝试了 testproc(lpad('', 32767, '')) 并且它有效。

32768 字节失败,所以它是 32K - 1 字节

【讨论】:

【参考方案3】:

在 PL/SQL 中,自 10gR2 以来,VARCHAR2 数据类型的最大大小为 32767 字节(可能更早,但我刚刚查看了该版本的文档)。

文档参考:

Oracle 12cR1:PL/SQL Language Reference 12c Release 1 Oracle 11gR2:PL/SQL Language Reference 11g Release 2 Oracle 10gR2:PL/SQL User's Guide and Reference 10g Release 2

【讨论】:

只是好奇,你知道为什么不是 32Kb 而不是 32Kb -1 吗? @Roland 不,我不知道。也许是null-terminated string,也许是别的东西。哦,请不要问为什么它是 2^15-1 而不是 2^16-1。只有甲骨文知道。 :) @Roland,这是因为默认的 2 字节有符号整数变量的范围是 -32768 到 32767。

以上是关于Oracle 中 varchar2 PL/SQL 子程序参数的大小限制是多少?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle通过PL/SQL Developer导出数据为CSV格式,VARCHAR2类型的字段如果存入的是数值(例如3307830000004059)太长,最后一位会被置为0

Oracle的CLOB大数据字段类型(转)

Orcal数据类型总结

PL/SQL Oracle 条件等于

在 PL/SQL 中使用 oracle SET 值

Oracle PL/SQL学习之基础篇