为什么我们总是需要指定VARCHAR(length)而不仅仅是VARCHAR?无论如何它是动态的.
UPD:我特别困惑的是它是强制性的(例如在MySQL中).
当值不超过10字节时VARCHAR2(1000),VARCHAR2(10)使用Oracle 而不是Oracle 定义列有什么影响?
该列是否仅占用存储值所需的空间,还是会对表空间/索引的大小/性能产生负面影响?
我在Oracle数据库10g中有一个存储过程,我的输入是varchar2,但是当输入字符串很长时(我不确定精确长度可能> 8000),我遇到了问题.
我的想法是'intext varchar2'(如下所示)默认是太小了.在我需要更长字符串的其他情况下,我可能将varchar2定义为"intext2 VARCHAR2(32767);" 我尝试在下面的代码中类似地定义大小,但我的语法不正确.
create or replace PROCEDURE TESTPROC ( intext IN VARCHAR2
) AS ....
Run Code Online (Sandbox Code Playgroud)
intext varchar2的(默认)大小是多少?
可以定义(增加)该大小吗?
谢谢
我想知道为什么Oracle需要在定义中使用size参数VARCHAR2.
我认为这是为了制约.oracle将此参数作为像NUMBERdataType 这样的可选项更好吗?
我经常在将旧表调整为更大的大小时遇到问题,因为有时值大于VARCHAR2列的大小定义.
定义一种类型的VARCHAR2(10或者是相同的VARCHAR2(1000).
我想,这是一个不必要的约束.如果没有,你知道这个约束导致一些有用的真实案例吗?为什么没有这种NUMBER类型的声明?
在Oracle PL/SQL中创建过程(或函数)时,不能指定varchar2参数的最大长度,只能指定数据类型.例如
create or replace procedure testproc(arg1 in varchar2) is
begin
null;
end;
Run Code Online (Sandbox Code Playgroud)
您是否知道可以作为Oracle中此过程的arg1参数传递的字符串的最大长度?
我找到了一篇Ask Tom的文章,解释说Oracle中的CHAR和VARCHAR2没有太大区别.它给人的印象是我应该为我想要存储字符串的每一列使用VARCHAR2(4000 BYTE),即使对于ISO 639-1语言代码,因为它没有任何区别.
我知道对ISO 639-1语言代码使用CHAR(2)来强制执行基本数据约束是有意义的.但这不是一个足够的约束,因为它允许存储'xy'在不是有效语言代码的列中.另一方面,如果我想更改我的应用程序以使用需要3个字符的ISO 639-2语言代码,我必须支付这个基本约束,并且我必须更改数据库.所以我倾向于从数据库级别放弃约束,因为在我看来,成本高于收益.
考虑到这一点,我想知道为什么我不应该将VARCHAR2(4000 BYTE)用于我打算存储在Oracle数据库中的任何短于4000字节的字符串?
假设你有这个程序:
PROCEDURE f (param VARCHAR2)
IS
var VARCHAR2(10);
BEGIN
var := 'hi';
END f;
Run Code Online (Sandbox Code Playgroud)
我想了解为什么var需要指定长度,但param不是.我很难在oracle文档中找到有关这方面的信息.
类似的问题,但对于Oracle.
为什么我不总是想选择VARCHAR(MAX)?
我在 PLSQL 中有一个函数,它使用字符串进行操作并返回 VARCHAR2 类型。
该函数中的变量之一是
result_key VARCHAR2 (4000) := '';
Run Code Online (Sandbox Code Playgroud)
当它处理大量数据时,我会收到ORA-06502: PL/SQL: numeric or value error: character string buffer too small错误。
看来我必须扩展我的result_key变量。我看到的唯一解决方案是声明result_key为
result_key VARCHAR2 (8000) := '';
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在不声明固定大小的情况下做到这一点result_key。