select chr(217) from dual;
返回:Ù但是:
declare
v_var1 varchar2(10) := null;
begin
v_var1 := v_var1||chr(217);
if v_var1 is null then
dbms_output.put_line('null');
else
dbms_output.put_line('not null');
dbms_output.put_line(v_var1);
end if;
end;
返回:null这是何故阿?谢谢解答!
返回:Ù但是:
declare
v_var1 varchar2(10) := null;
begin
v_var1 := v_var1||chr(217);
if v_var1 is null then
dbms_output.put_line('null');
else
dbms_output.put_line('not null');
dbms_output.put_line(v_var1);
end if;
end;
返回:null这是何故阿?谢谢解答!
这一句有误
:=null去掉
没有赋初值本身就是空值
问题是chr(217)是空的..
select chr(217) from dual
这个我执行结果是空,你怎么得到Ù 的
执行结果是43188
SQL>
SQL> declare
2 v_var1 varchar2(10) := null;
3 begin
4 v_var1 := v_var1||chr(217);
5 if v_var1 is null then
6 dbms_output.put_line('null');
7 else
8 dbms_output.put_line('not null');
9 dbms_output.put_line(v_var1);
10 end if;
11 end;
12 /not null
?PL/SQL procedure successfully completedSQL我这里执行是not null
不要这么用
你想查对应的ascii码的话直接用ascii函数
SQL> set serveroutput on
SQL> declare
2 v_var1 varchar2(10) := null;
3 begin
4 v_var1 := v_var1||chr(217);
5 if v_var1 is null then
6 dbms_output.put_line('null');
7 else
8 dbms_output.put_line('not null');
9 dbms_output.put_line(v_var1);
10 end if;
11 end;
12 /
nullPL/SQL 过程已成功完成。SQL>
SQL> select * from v$version;BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - ProductionSQL>
奇怪了,我这里是null,不知道是配置问题还是版本问题。
不查,我是把用户的密码来回倒腾几次形成一个加密的码,sybase上是好的,改成oracle过程倒腾出来是null所以才找什么原因。
我也觉得是,因为发现刚才那位老兄not null是英文的提示。
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
要用的话就用chr(43188)代替吧
错,你可以执行
select null||'ok' from dual
试试
算了,不钻牛角尖了,我考虑其它方法来加密。
谢谢你们,结帖了。