ORACLE如何查询字符串的真正长度
数据库ORACLE 9i 我在使用PL/SQL 处理数据时遇到一个问题,请大家帮忙解决一下。
我要将表A中的内容插入B表,两表的结构分别为:A表 xm varchar2(10),sfzh varchar2(19) ;B表 xm varchar2(10),sfzh varchar2(18) 。在使用select length(sfzh) from A group by length(sfzh);查询时,length(sfzh)没有大于18的,但我在使用insert into B(xm,sfzh) select xm,sfzh from A;从A表向B表插入数据时,系统提示“ORA-01401: 插入的值对于列过大”点‘ok’按钮后,光标定位在A表的sfzh字段。我用EDIT修改A表sfzh字段长度改为18时,提示“ORA-01441: 无法减小列长度,因为一些值过大”,请问,有什么办法可以查出A表中哪些记录的sfzh字段值过大?
09-12-26 yinfu_ty 发布
create or replace procedure p_temp_c(c1 in varchar2, c2 in varchar2) is
str varchar2(200);
str1 varchar2(200);
str2 varchar2(200);
str3 varchar2(200);
str4 varchar2(200);
begin
str1 := utl_raw.cast_to_raw(c1);
str2 := utl_raw.cast_to_raw(c2);
str3 := length(c1);
str4 := length(c2);
select decode(sign(str1 - str2),
1,
utl_raw.cast_to_varchar2(str1),
utl_raw.cast_to_varchar2(str2))
into str
from dual;
dbms_output.put_line('c1的长度:' || str3);
dbms_output.put_line('c2的长度:' || str4);
dbms_output.put_line('较大的是:' || str);
end;
.
◆◆
请登录后再发表评论!
◆◆