三种情况:
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,会按照位数在后面补空格