oracle long与varchar,Oracle Varchar2 LONG 长度?

突然在写程序的时候发现了个小问题,环境为Oracle10g,工具PL\SQL DEVELOPER7.1.5 ,写一个存储过程

例如:

有一个变量 V_I IN VARCHAR2(4000);

下面我求出传入的字符串的长度

CREATE OR REPLACE PROCEDURE TEST_LENGTH(

V_I varchar2--传入参数

) IS

V_I_STR varchar2(4000);--传入参数

v_r number(8);--计数

BEGIN

V_I_STR := V_I;--传入参数

select length(V_I_STR) INTO v_r from DUAL;

DBMS_OUTPUT.put_line(v_r);

END;

如果我传入的字符串大于2001,就会抛出错误ora-01480 trailing null missing from STR bind value

如果我传入的字符串小于 ,等于2000,就不抛出错误。

不知道Varchar2(4000)为啥缩水了。。。??

如果单独用Length()函数

SELECT LENGTH(str) from DUAL;

这里如果str的长度我传入大于4000的就会报错ora-01704 string literal too lang

这里想问Length()函数中的字符串有长度限制啊?

---如果我把存储过程中的参数类型换成 LONG 型

CREATE OR REPLACE PROCEDURE TEST_LENGTH(

V_I LONG--传入参数

) IS

V_I_STR LONG;--传入参数

v_r number(8);--计数

BEGIN

V_I_STR := V_I;--传入参数

select length(V_I_STR) INTO v_r from DUAL;

DBMS_OUTPUT.put_line(v_r);

END;

这里我传入的字符串长度 是4000,这时可以通过了。不报错了

但是如果我传入的是4001,这时就又报错了。。ORA-01460: unimplemented or unreasonable conversion requested

请各位大哥们给小弟解答解答,指点迷津下被?呵呵 谢谢哦�

你可能感兴趣的:(oracle,long与varchar)