关于Oracle中varchar2和dbms_output.put_line的长度限制问题小结
2012-03-27 15:28
453 查看
一. varchar2长度限制问题
1) 表字段创建最大长度:4000
SQL> CREATE TABLE t_test1(a VARCHAR2(4000));
--正确
Table created.
SQL> CREATE TABLE t_test2(a VARCHAR2(4001));
--错误
CREATE TABLE t_test2(a VARCHAR2(4001))
*
ERROR at line 1:
ORA-00910: specified length too long for its datatype
2) plsql变量定义最大长度:32767
SQL> CREATE OR REPLACE PROCEDURE sp_test1 (p IN VARCHAR2 DEFAULT NULL ) --正确
IS
x_var VARCHAR2 (32767);
BEGIN
DBMS_OUTPUT.put_line (p);
END;
/
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE sp_test2 (p IN VARCHAR2 DEFAULT NULL ) --错误
IS
x_var2 VARCHAR2 (32768);
BEGIN
NULL;
END;
/
Warning: Procedure created with compilation errors.
SQL> show error;
Errors for PROCEDURE SP_TEST2:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/23 PLS-00215: String length constraints must be in range (1 ..
32767)
3) plsql调用参数最大长度:65535
SQL> DECLARE
lv_test VARCHAR2 (32767);
BEGIN
FOR i IN 1 .. 32767
LOOP
lv_test := lv_test || '-';
END LOOP;
sp_test1 (LENGTHB (lv_test || lv_test || '1'));
END;
/
65535
SQL> DECLARE
lv_test VARCHAR2 (32767);
BEGIN
FOR i IN 1 .. 32767
LOOP
lv_test := lv_test || '-';
END LOOP;
sp_test1 (LENGTHB (lv_test || lv_test || '12'));
END;
/
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 9
二. dbms_output.put_line长度限制问题
对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767.
如果报错buffer overflow, 执行如下语句即可:
set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
对于10g以下版本dbms_output.put_line最大长度限制是255.
--End--
1) 表字段创建最大长度:4000
SQL> CREATE TABLE t_test1(a VARCHAR2(4000));
--正确
Table created.
SQL> CREATE TABLE t_test2(a VARCHAR2(4001));
--错误
CREATE TABLE t_test2(a VARCHAR2(4001))
*
ERROR at line 1:
ORA-00910: specified length too long for its datatype
2) plsql变量定义最大长度:32767
SQL> CREATE OR REPLACE PROCEDURE sp_test1 (p IN VARCHAR2 DEFAULT NULL ) --正确
IS
x_var VARCHAR2 (32767);
BEGIN
DBMS_OUTPUT.put_line (p);
END;
/
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE sp_test2 (p IN VARCHAR2 DEFAULT NULL ) --错误
IS
x_var2 VARCHAR2 (32768);
BEGIN
NULL;
END;
/
Warning: Procedure created with compilation errors.
SQL> show error;
Errors for PROCEDURE SP_TEST2:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/23 PLS-00215: String length constraints must be in range (1 ..
32767)
3) plsql调用参数最大长度:65535
SQL> DECLARE
lv_test VARCHAR2 (32767);
BEGIN
FOR i IN 1 .. 32767
LOOP
lv_test := lv_test || '-';
END LOOP;
sp_test1 (LENGTHB (lv_test || lv_test || '1'));
END;
/
65535
SQL> DECLARE
lv_test VARCHAR2 (32767);
BEGIN
FOR i IN 1 .. 32767
LOOP
lv_test := lv_test || '-';
END LOOP;
sp_test1 (LENGTHB (lv_test || lv_test || '12'));
END;
/
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 9
二. dbms_output.put_line长度限制问题
对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767.
如果报错buffer overflow, 执行如下语句即可:
set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
对于10g以下版本dbms_output.put_line最大长度限制是255.
--End--
相关文章推荐
- 解决oracle 10g sql *plus 用dbms_output.put_line()输出时的长度限制问题 ORA-20000: ORU-10028: line le
- Oracle dbms_output.put_line长度限制问题
- PL/SQL 中 dbms_output.put_line 输出字符长度限制的问题
- PL/SQL 中 dbms_output.put_line 输出字符长度限制的问题
- 关于Oracle Developer 的 DBMS_OUTPUT.PUT_LINE 输出问题
- oracle命令窗口中dbms_output.put_line不显示问题
- dbms_output.put_line输出长度问题
- 关于10g以下dbms_output.put_line超长的问题 (转http://wallimn.iteye.com/blog/486615)
- DBMS_OUTPUT.PUT_LINE方法的长度限制
- Oracle的DBMS_OUTPUT.PUT_LINE用法及脚本批处理方法
- Oracle中DMS_OUTPUT.PUT_LINE和DATE问题
- 设置 oracle sqlplus DBMS_OUTPUT.put_line
- ORACLE 11g 自带程序 SQL Developer中不显示DBMS_OUTPUT.PUT_LINE()解决方案
- Oracle的DBMS_OUTPUT.PUT_LINE用法及脚本批处理方法
- 关于Oracle用sqlldr导入限制值长度大于255问题解决方法
- 小气的dbms_output.put_line长度
- ORACLE 11g 自带程序 SQL Developer中不显示DBMS_OUTPUT.PUT_LINE()解决方案
- oracle 拆分输出dbms_output.put_line longValue解决
- Oracle的dbms_output包的put()和put_line()的区别只是有没有回车换行吗?
- 设置 oracle sqlplus DBMS_OUTPUT.put_line