三种情况:
1 char变量直接赋值到varchar2
2 function输出的char赋值到varchar2
3 procedure输出的char赋值到varchar2
set serveroutput on
declare
v_char char:='Y';
v_varcha2 varchar2(10);
function functestchar return char
is
begin
return 'Y';
end functestchar;
procedure testchar(p_polno out char)
is
begin
p_polno:='Y';
end testchar;
begin
v_varcha2:=v_char;
dbms_output.put_line('v_varcha2='||v_varcha2);
dbms_output.put_line('length(v_varcha2)='||length(v_varcha2));
testchar(v_varcha2);
dbms_output.put_line('v_varcha2='||v_varcha2);
dbms_output.put_line('length(v_varcha2)='||length(v_varcha2));
v_varcha2:=functestchar;
dbms_output.put_line('v_varcha2='||v_varcha2);
dbms_output.put_line('length(v_varcha2)='||length(v_varcha2));
end;
/
输出结果:
v_varcha2=Y
length(v_varcha2)=1
v_varcha2=Y
length(v_varcha2)=10
v_varcha2=Y
length(v_varcha2)=1
在9i和10g下的验证结果均为
char变量直接赋值 function输出的char赋值到varchar2,内容和位数不变,procedure输出的char赋值到varchar2,会按照位数在后面补空格