oracle参数传nulL,Oracle通过struct传入varchar2参数为null的解决办法

Oracle通过struct传入varchar2参数为null的解决办法

[日期:2011-01-23]

来源:Linux社区

作者:k09800

[字体:大 中 小]

-- 3. 商品编号 组合查询字符串

for i in 1..spbh_lst.count loop

var_hidden3 := '';

--取得choice各列的值

var_choice3 := spbh_lst(i);

var_hidden3 := spbh_lst(i).xhidden;

var_value3 := spbh_lst(i).xvalue;

--添加筛选条件

--where 1=1 and cl.cc_id in (212,244,245,246,247,248,249,243,213,250,251,252,253,254,255,256,257,258,214,215,210) and mp.re_name like '%门%' and s.sr_number like '%sp%' and s.sr_name like '%宏%' and sc.cs_idername like '%2%' and (sc.cs_zuser like '%朱%' or sc.cs_fuser like '%江%') and sc.cs_leixing like '%不%' and sc.cs_invoice like '%3%' and sc.cs_man1 like '%科%' and ma.ar_name like '%川%'

if 0 = var_i_xskf3 then

--第一个条件

if var_hidden3 = 'like' then

var_sql_like3 := ' and (s.sr_number like ''%'|| var_value3 ||'%''';

end if;

if var_hidden3 = 'not like' then

-- 第一个 not like

var_sql_notlike3 := ' and (s.sr_number not like ''%'|| var_value3 ||'%''';

end if;

if var_hidden3='=' then

-- 第一个 =

var_sql_eq3 := ' and (s.sr_number = '''|| var_value3 ||'''';

end if;

if var_hidden3 = '>' then

-- 第一个 >

var_sql_gt3 := ' and (s.sr_number > '''|| var_value3 ||'''';

end if;

if var_hidden3 = '

-- 第一个 <

var_sql_lt3 := ' and (s.sr_number < '''|| var_value3 ||'''';

end if;

if var_hidden3 = '>=' then

var_sql_gteq3 := ' and (s.sr_number >= '''|| var_value3 ||'''';

end if;

if var_hidden3 = '<=' then

var_sql_lteq3 := ' and (s.sr_number <= '''|| var_value3 ||'''';

end if;

if var_hidden3 = '<>' then

var_sql_uneq3 := ' and (s.sr_number <> '''|| var_value3 ||'''';

end if;

else

-- 多于一个条件

if var_hidden3 = 'like' then

var_sql_like3 := var_sql_like3 || ' or s.sr_number like ''%'|| var_value3 ||'%''';

end if;

if var_hidden3 = 'not like' then

-- 第一个 not like

var_sql_notlike3 := var_sql_notlike3 || ' or s.sr_number not like ''%'|| var_value3 ||'%''';

end if;

if var_hidden3='=' then

-- 第一个 =

var_sql_eq3 := var_sql_eq3 || ' or s.sr_number = '''|| var_value3 ||'''';

end if;

if var_hidden3 = '>' then

-- 第一个 >

var_sql_gt3 := var_sql_gt3 || ' or s.sr_number > '''|| var_value3 ||'''';

end if;

if var_hidden3 = '

-- 第一个 <

var_sql_lt3 := var_sql_lt3 || ' or s.sr_number < '''|| var_value3 ||'''';

end if;

if var_hidden3 = '>=' then

var_sql_gteq3 := var_sql_gteq3 || ' or s.sr_number >= '''|| var_value3 ||'''';

end if;

if var_hidden3 = '<=' then

var_sql_lteq3 := var_sql_lteq3 || ' or s.sr_number <= '''|| var_value3 ||'''';

end if;

if var_hidden3 = '<>' then

var_sql_uneq3 := var_sql_uneq3 || ' or s.sr_number <> '''|| var_value3 ||'''';

end if;

end if;

var_sql := var_sql || var_sql_like3 || var_sql_notlike3 || var_sql_lt3 || var_sql_gt3 || var_sql_lteq3 || var_sql_gteq3 || var_sql_uneq3 || var_sql_eq3;

var_i_xskf3 := var_i_xskf3 + 1;

end loop;

if var_i_xskf3 > 0 then

-- 存在筛选条件,在筛选条件最后添加 ' ) ' , 结束

var_sql := var_sql || ')';

end if;

-- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

if fromdate is not null and todate is not null then

var_sql := var_sql || ' and sc.cs_intime <= to_date(''' || todate || ''',''yyyy-mm-dd hh24:mi:ss'') and to_date(''' || fromdate || ''',''yyyy-mm-dd hh24:mi:ss'') <= sc.cs_intime';

end if;

if idStr is not null then

var_sql := var_sql || ' and cl.cc_id in ('|| idStr ||')';

end if;

--order by desc , desc , desc , desc , desc , desc , desc , desc , desc , desc , desc;

--order by , , , , , , , , ,

-- 1. xskf_paixu 销售库房 mp.re_name

if xskf_paixu is not null and 0 = var_i_paixu then

var_sql := var_sql || ' order by mp.re_name '|| xskf_paixu ||'';

var_i_paixu := var_i_paixu + 1;

end if;

if xskf_paixu is not null and var_i_paixu > 0 then

var_sql := var_sql || ',mp.re_name '|| xskf_paixu ||'';

var_i_paixu := var_i_paixu + 1;

end if;

-- 2. splx_paixu 商品类型 cl.cc_name

if splx_paixu is not null and 0 = var_i_paixu then

var_sql := var_sql || ' order by cl.cc_name '|| splx_paixu ||'';

var_i_paixu := var_i_paixu + 1;

end if;

if splx_paixu is not null and var_i_paixu > 0 then

var_sql := var_sql || ',cl.cc_name '|| splx_paixu ||'';

var_i_paixu := var_i_paixu + 1;

end if;

-- 3. spbh_paixu 商品编号 s.sr_number

if spbh_paixu is not null and 0 = var_i_paixu then

var_sql := var_sql || ' order by s.sr_number '|| spbh_paixu ||'';

var_i_paixu := var_i_paixu + 1;

end if;

if spbh_paixu is not null and var_i_paixu > 0 then

var_sql := var_sql || ',s.sr_number '|| spbh_paixu ||'';

var_i_paixu := var_i_paixu + 1;

end if;

if var_sql is not null then

open m2_cursor for var_sql;

end if;

end proc_select_multi2;

开始做开发的时候使用Oracle 10g xe运行以上(1)(2)中的代码很正常,但当要正式发布时候,在oracle 10g 企业版中运行上述(1)(2)中的代码就有问题,经过仔细检查,发现通过java调用oracle的存储过程,其中传入参数为数组,则数组中的元素是字符串内容的,在oracle中接收的内容是null,其他的类型:如number、float都可以正常接收,自己在oracle的存储过程中输出的结果是null。原来,在定义数组类型的时候,要将varchar2换为nvarchar2就可以正常接收string类型的参数了。于是将(1)中的内容改为如下代码:

drop table choice;

create table choice(

xhidden nvarchar2(10),

xvalue nvarchar2(100)

);

drop type XSKF_CHOICE;

drop type XSKF_CHOICE_LST;

create or replace type XSKF_CHOICE as object (

xhidden nvarchar2(10),

xvalue nvarchar2(100)

);

create or replace type XSKF_CHOICE_LST as table of XSKF_CHOICE;

    再在oracle 10g 企业版中测试,正常了!心情一阵激动!0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值