【问题标题】:Oracle VARCHAR limit as a procedure out parameterOracle VARCHAR 限制作为过程输出参数
【发布时间】:2012-08-30 10:33:52
【问题描述】:

我有一个在 Oracle 11g 下编写的存储过程,我的输出参数之一是一个字符串(即 VARCHAR 类型)。

我使用此参数返回由; 分隔的连接数字列表。 这个列表可以是任意大小,我事先不知道大小。

我的问题是VARCHAR 是否足够或者它有大小限制(这当然会给我带来麻烦)。如果不是这种情况,我应该使用什么?

谢谢

【问题讨论】:

  • 在我看来 VARCHAR 被限制为 50 个字符

标签: java oracle stored-procedures


【解决方案1】:

PL/SQL 中的 VARCHAR2 可能包含 32,767 个字符。 (请注意,这与数据库上的 VARCHAR2 列不同,它的最大长度为 4,000 个字符)

此外,您在上面说您正在使用 VARCHAR。 Oracle 建议您使用 VARCHAR2,而不是 VARCHAR。

【讨论】:

  • 那么有没有办法使用没有限制的类型?或者我应该如何返回一个由过程动态构建并可能通过大小限制的字符串?
  • 如果 32,767 还不够,我建议看看 CLOB 数据类型。它更难使用,但它至少可以达到 2Gb(不记得确切的限制)
  • 请注意,限制为 4000 或 32767 个字节,而不是字符。如果您使用多字节字符编码方案,则区别很重要。
  • 如果您将数据库设置为字符“模式”而不是字节“模式”,它可以是字符。请参阅oracle-base.com/articles/9i/… 以获得更好的解释。
  • cagcowboy:你确定吗? AFAIK,NLS_LENGTH_SEMANTICS 设置仅在声明没有 BYTE/CHAR 限定符的 VARCHAR2 列的长度时影响默认解释。它对实际的类型限制没有影响。
【解决方案2】:

为什么不使用合适的数据类型,比如数字数组,而不是尝试在字符串中编码复杂的结构?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多