关于oraclevarchar2的最大长度

上传人:平*** 文档编号:18557770 上传时间:2017-11-15 格式:DOCX 页数:4 大小:14.08KB
返回 下载 相关 举报
关于oraclevarchar2的最大长度_第1页
第1页 / 共4页
关于oraclevarchar2的最大长度_第2页
第2页 / 共4页
关于oraclevarchar2的最大长度_第3页
第3页 / 共4页
关于oraclevarchar2的最大长度_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《关于oraclevarchar2的最大长度》由会员分享,可在线阅读,更多相关《关于oraclevarchar2的最大长度(4页珍藏版)》请在金锄头文库上搜索。

1、关于 varchar2 的最大长度varchar2 有两个最大长度:一个是在字段类型 4000;一个是在 PL/SQL 中变量类型 32767。今天犯了一个小错误,就是函数的 varchar2 类型的返回值长度也是 4000,而不是我以为的32767。想了一下,这是一个比较容易出错的地方。因为在函数中我可以声明长度超过 4000 的字符串变量,并且将它作为返回值,这里是不会提示编译错误的。这个函数平时都可以正常执行,而一旦这个字符串长度超过 4000,函数执行就会出错。所以这个问题虽然比较简单,仍然记录一下。C:Documents and Settingsyuechao.tianycsqlpl

2、usSQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5 月 5 17:15:59 2009Copyright (c) 1982, 2005, Oracle. All rights reserved.请输入用户名: test/test连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL create or replace function fun

3、ny return varchar22 is3 v_yct varchar2(32767);4 begin5 v_yct := rpad(a, 4001, b);6 return v_yct;7 end;8 /函数已创建。SQL select funny from dual;select funny from dual*第 1 行出现错误:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小ORA-06512: 在 TEST.FUNNY, line 6本来以为记录下来就好。刚才跟一位同事讨论了一下,认为有可能在 schema 级 varchar2 的长度限制都是 4000,

4、而在 PL/SQL 代码级的长度限制是 32767。下面继续测试:- 1. 作为函数入参的限制是 32767SQL create or replace function funny( p_char in varchar2 ) return number 2 is3 begin4 return length(p_char);5 end;6 /函数已创建。SQL declare2 v_char varchar2(32767);3 begin4 v_char := rpad(a, 32767, b);5 dbms_output.put_line(funny(v_char);6 end;7 /3276

5、7PL/SQL 过程已成功完成。- 2. 同样的函数,在 schema 级和在 PL/SQL 代码级长度限制不同SQL select length(rpad(a, 4001, b) from dual;LENGTH(RPAD(A,3276558,B)-4000SQL begin2 dbms_output.put_line(length(rpad(a, 4001, b);3 end;4 /4001PL/SQL 过程已成功完成。如果中间结果字符串长度超过限制会怎样呢?(1)在 PL/SQL 中,如果中间结果超过 32767,没有影响:SQL declare2 v_char1 varchar2(32

6、767);3 v_char2 varchar2(32767);4 v_char3 varchar2(10);5 begin 6 v_char1 := lpad(a, 32767, a);7 v_char2 := lpad(b, 32767, b);8 v_char3 := substr(v_char1 | v_char2, 32763, 10);9 dbms_output.put_line(v_char3);10 end;11 /aaaaabbbbbPL/SQL 过程已成功完成。(2)在 schema 级如果中间结果超过 4000,会提示错误:SQL select substr(rpad(a,

7、 4000, a)|rpad(b, 4000, b), 3996, 10) from dual;select substr(rpad(a, 4000, a)|rpad(b, 4000, b), 3996, 10) from dual*第 1 行出现错误:ORA-01489: 字符串连接的结果过长如果字符串长度超过限制怎么办?可以使用 CLOB 类型。比如最开始的那个例子,可以将返回值改为 CLOB 类型:SQL create or replace function funny return clob2 is3 v_yct varchar2(32767);4 begin5 v_yct := rp

8、ad(a, 4001, b);6 return v_yct;7 end;8 /函数已创建。SQL select funny from dual;FUNNY-abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbSQL set long 10000SQL select funny from dual;FUNNY-abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.这样返回字符串的最大长度就是 32767 了

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号