網(wǎng)上經(jīng)常有人問(wèn)Oracle varchar2最大支持長(zhǎng)度為多少?其實(shí)這個(gè)叫法不太準(zhǔn)確,varchar2分別在oracle的sql和pl/sql中都有使用,oracle 在sql參考手冊(cè)和pl/sql參考手冊(cè)中指出:oracle sql varchar2的最大支持長(zhǎng)度為4000個(gè)字節(jié)(bytes);而 oracle plsql varchar2最大支持長(zhǎng)度為32767個(gè)字節(jié)。這就是有朋友問(wèn),在pl/sql中定義了32767個(gè)(字符/字節(jié)),為什么在表的字段中不能定義大于4000個(gè)字節(jié)的原因了。-
下面分別給出varchar2在Oracle sql和plsql中最大長(zhǎng)度的示例。
Oracle sql中varchar2最大支持長(zhǎng)度示例–最大長(zhǎng)度為4000
drop table idb_varchar2;
create table idb_varchar2
(id number,
name varchar2(4000 char));
insert into idb_varchar2 values(1,lpad('中',32767,'中'));
insert into idb_varchar2 values(2,lpad('a',32767,'b'));
commit;
select id,lengthb(name),length(name) from idb_varchar2;
drop table idb_varchar2;
create table idb_varchar2
(id number,
name varchar2(4000 char));
insert into idb_varchar2 values(1,lpad('中',32767,'中'));
insert into idb_varchar2 values(2,lpad('a',32767,'b'));
commit;
select id,lengthb(name),length(name) from idb_varchar2;
輸出結(jié)果:
dw@dw>drop table idb_varchar2; 表已刪除。 dw@dw>create table idb_varchar2 2 (id number, 3 name varchar2(4000 char)); 表已創(chuàng)建。 dw@dw>insert into idb_varchar2 values(1,lpad('中',32767,'中')); 已創(chuàng)建 1 行。 dw@dw>insert into idb_varchar2 values(2,lpad('a',32767,'b')); 已創(chuàng)建 1 行。 dw@dw>commit; 提交完成。 dw@dw>select id,lengthb(name),length(name) from idb_varchar2; ID LENGTHB(NAME) LENGTH(NAME) ---------- ------------- ------------ 1 4000 2000 2 4000 4000 已選擇2行。
Oracle sql中varchar2最大支持長(zhǎng)度示例–設(shè)計(jì)長(zhǎng)度為4001
drop table idb_varchar2;
create table idb_varchar2
(id number,
name varchar2(4001));
drop table idb_varchar2;
create table idb_varchar2
(id number,
name varchar2(4001));
結(jié)果:
dw@dw>drop table idb_varchar2; 表已刪除。 dw@dw>create table idb_varchar2 2 (id number, 3 name varchar2(4001)); name varchar2(4001)) * 第 3 行出現(xiàn)錯(cuò)誤: ORA-00910: 指定的長(zhǎng)度對(duì)于數(shù)據(jù)類(lèi)型而言過(guò)長(zhǎng)
超過(guò)4001會(huì)報(bào)錯(cuò)。
Oracle plsql中varchar2最大支持長(zhǎng)度示例
set serveroutput on
declare
v_var varchar2(32767 byte);
v_char varchar2(32767 char);
begin
v_var := lpad('a',32767,'a');
dbms_output.put_line(length(v_var));
v_char := lpad('中',32767,'中');
dbms_output.put_line(lengthb(v_var));
v_var := lpad('中',32768,'中');
end;
/
--定義如果超過(guò)32768會(huì)報(bào)錯(cuò)
declare
v_var varchar2(32768);
begin
null;
end;
/
set serveroutput on
declare
v_var varchar2(32767 byte);
v_char varchar2(32767 char);
begin
v_var := lpad('a',32767,'a');
dbms_output.put_line(length(v_var));
v_char := lpad('中',32767,'中');
dbms_output.put_line(lengthb(v_var));
v_var := lpad('中',32768,'中');
end;
/
--定義如果超過(guò)32768會(huì)報(bào)錯(cuò)
declare
v_var varchar2(32768);
begin
null;
end;
/
輸出結(jié)果:
dw@dw>set serveroutput on
dw@dw>declare
2 v_var varchar2(32767 byte);
3 v_char varchar2(32767 char);
4 begin
5 v_var := lpad('a',32767,'a');
6 dbms_output.put_line(length(v_var));
7 v_char := lpad('中',32767,'中');
8 dbms_output.put_line(lengthb(v_var));
9 v_var := lpad('中',32768,'中');
10 end;
11 /
32767
32767
declare
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-06502: PL/SQL: 數(shù)字或值錯(cuò)誤 : 字符串緩沖區(qū)太小
ORA-06512: 在 line 9
dw@dw>
dw@dw>declare
2 v_var varchar2(32768);
3 begin
4 null;
5 end;
6 /
v_var varchar2(32768);
*
第 2 行出現(xiàn)錯(cuò)誤:
ORA-06550: 第 2 行, 第 18 列:
PLS-00215: 字符串長(zhǎng)度限制在范圍 (1...32767)
本文出自:億恩科技【m.1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|