【发布时间】:2014-04-15 10:09:18
【问题描述】:
据我所知,在声明存储过程时,不可能指定 CHAR 的长度,因此它似乎默认为 200 个字符的长度。这是一个问题,因为我的表只接受 1 个字符的 CHAR。
因此,即使我只将单个字符传递给存储过程,我仍然会收到此错误:
ORA-12899: value too large for columns ... (actual: 200, maximum: 1)
这是我所拥有的:
CREATE OR REPLACE
PACKAGE BODY TESTPACKAGE AS
PROCEDURE Testing(myChar IN CHAR)
IS
BEGIN
UPDATE my_table SET my_column = myChar WHERE [some condition];
END Testing;
END TESTPACKAGE;
我的包裹声明:
PROCEDURE Testing(myChar IN CHAR);
真正的存储过程显然有更多的参数和逻辑,但我已经将其剥离到问题区域。
在不改变我的表以接受 200 个字符的 CHARS(这完全没有必要)的情况下,处理这个问题的最佳方法是什么?
谢谢
【问题讨论】:
-
尝试使用
varchar作为参数 -
是的,这行得通。为什么 varchar 有效,但 CHAR 无效?如果您将评论移至答案,我会接受。
-
因为
CHAR总是用空格填充到定义的长度。这是使用CHAR几乎没有意义的原因之一。 -
如果你声明 char(200) 它总是 200 长。 Varchar2(200) 只会占用您分配给它的字符串所需的空间。
标签: sql oracle plsql oracle11g