Oracle Varchar2 LONG 长度?
东北小硬人 2010-04-01 09:28:44 突然在写程序的时候发现了个小问题,环境为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
请各位大哥们给小弟解答解答,指点迷津下被?呵呵 谢谢哦!