突然在写程序的时候发现了个小问题,环境为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);--计数
BEGINV_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);--计数
BEGINV_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请各位大哥们给小弟解答解答,指点迷津下被?呵呵 谢谢哦!
例如:
有一个变量 V_I IN VARCHAR2(4000);
下面我求出传入的字符串的长度
CREATE OR REPLACE PROCEDURE TEST_LENGTH(
V_I varchar2--传入参数
) IS
V_I_STR varchar2(4000);--传入参数
v_r number(8);--计数
BEGINV_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);--计数
BEGINV_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请各位大哥们给小弟解答解答,指点迷津下被?呵呵 谢谢哦!
varchar 的最大长度为:32767
定义long是不需要指定长度
varchar2 要这样写:varchar2(32767);
请问字符集对oracle 的varchar2 的长度是否有影响????
V_I_STR varchar2(32767);--传入参数如果表中,VARCHAR2则最大只能是4000字节;
在存储过程中,VARCHAR2最大可到32767字节;oracle推荐使用clob和blob,限制较少;
oracle不推荐使用long了。long最大可达2G,
clob最大可达4G
LONG :存储可变长度字符数据,最多能存储 2GB。已经很少被使用。
LONG RAW 数据类型用于存储可变长度的二进制数据,最多能存储 2 GB,已经很少被使用
LOB 称为“大对象”数据类型,可以存储多达 4GB 的非结构化信息,例如声音剪辑和视频文件等
CLOB 即 Character LOB(字符 LOB),它能够存储大量字符数据
BLOB 即 Binary LOB(二进制 LOB),可以存储较大的二进制对象,如图形、视频剪辑和声音文件 我昨天刚学了,现学现卖了,呵呵呵.....
2 a varchar2(32767);
3 begin
4 for i in 1..32767 loop
5 a := a || 't';
6 end loop;
7 dbms_output.put_line(length(a));
8 end;
9 /
32767
PL/SQL procedure successfully completed