首页 >

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

数据库|mysql教程Oracle通过struct传入varchar2参数为null的解决办法
Oracle教程,Oracle通过struct传入varch
数据库-mysql教程
自定义时间插件源码,vscode和vsco区别,ubuntu下载链接,tomcat日志获取ip,sqlite3清除命令行,红黑相间的小爬虫尾部有黑毛,php 正则 结尾,娄烦seo优化包括什么,礼物说网站模板,easyui 登陆模板lzw
在开始做开发的时间里,由于方便,使用的是oracle 10g xe,官方的称法叫做oracle 10g特别版,最开始使用就是它方便。再使用p
unity天天跑酷源码,vscode检测不到jdk,ubuntu开机出现busybox,tomcat 输出日志,sqlite的sql语法,网页设计需要学什么,织梦数据库已经存在 系统将覆盖数据库,内网服务器负载均衡 实施方案,下拉悬停插件,前端页面设计与框架,梦见小爬虫,php字符串拼接,郑州seo外包,springboot广告,aspcms常用标签,标签式网站内容管理,as3 网页大小,css 字体模板,后台刷新前台页面,公众号支付页面模板,商城多级分销管理系统,豆瓣电影小程序lzw
c 服务端客户端 源码,删除ubuntu系统引导,tomcat 放视频教程,爬虫店logo,php控制css样式,seo实战密码第四版有电子版吗lzw

困扰了自己一个多月的Oracle存储过程由于版本不同的问题,今天花了一整天的时间,终于在下午晚些的时候,解决了,这个问题在本月的绩效考核之中占10%呢,还是很重要的,既然解决了,写下,给大伙做个简单说明。

是这样的,前段时间,由于公司的一个管理信息系统要搞发布会,功能上,老大要求在“销售统计”这块能够加上多条件组合查询的功能,这个功能做好了,真的很好,但是要灵活组合用户的输入的各项条件,再进行数据库的内容筛选,也是不容易以一种简单的方法实现的。在这个上面,,我使用了Servlet做控制条件(开发基于J2EE的MVC模式),oracle存储过程来进行动态sql的处理,里面很多的判断,就不细说了,设计思想是这样的,下面上图:

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

在开始做开发的时间里,由于方便,使用的是oracle 10g xe,官方的称法叫做oracle 10g特别版,最开始使用就是它方便。再使用pl sql工具来写存储过程,编写、测试,都没问题。到了10月10日那天要发布的时候,从xe把数据库导入企业版的oracle10g中以后,测试发现原来运行正常的页面点击以后,就白了,什么内容都没有,到MyEclipse的console台里查看,报了错,第一眼看过去,应该是存储过程里的动态sql组合不对。第二天,把存储过程组合好的sql输出以后,发现在if…then中的判断根本没做,当时感觉就是判断相等的地方,没有判断到,直到今天都这样认为。

(1)创建oracle数组类型:
drop table choice;
create table choice(
xhidden varchar2(10),
xvalue varchar2(100)
);
drop type XSKF_CHOICE;
drop type XSKF_CHOICE_LST;
create or replace type XSKF_CHOICE as object (
xhidden varchar2(10),
xvalue varchar2(100)
);
create or replace type XSKF_CHOICE_LST as table of XSKF_CHOICE;


(2)在oracle的存储过程中判断字符串是否相等:
— 7. 多条件组合查询
procedure proc_select_multi2(
xskf_lst in xskf_choice_lst , xskf_paixu in varchar2 ,
idStr in varchar2 , splx_paixu in varchar2 ,
spbh_lst in xskf_choice_lst , spbh_paixu in varchar2 ,
fromdate in varchar2 , todate in varchar2 ,
m2_cursor out xskf_cursor
) as
var_sql varchar2(4000);
var_i_paixu number(2) := 0;
— 7.1 销售库房
var_choice1 xskf_choice;
var_sql_like1 varchar2(1000);
var_sql_notlike1 varchar2(1000);
var_sql_lt1 varchar2(1000);
var_sql_gt1 varchar2(1000);
var_sql_lteq1 varchar2(1000);
var_sql_gteq1 varchar2(1000);
var_sql_uneq1 varchar2(1000);
var_sql_eq1 varchar2(1000);
var_hidden1 varchar2(10);
var_value1 varchar2(100);
var_i_xskf1 number(2) := 0; — 控制 商品库房 条件的组合
— ——————————————–
— 7.2 商品类型

— ——————————————–
— 7.3 商品编号
var_choice3 xskf_choice;
var_sql_like3 varchar2(1000);
var_sql_notlike3 varchar2(1000);
var_sql_lt3 varchar2(1000);
var_sql_gt3 varchar2(1000);
var_sql_lteq3 varchar2(1000);
var_sql_gteq3 varchar2(1000);
var_sql_uneq3 varchar2(1000);
var_sql_eq3 varchar2(1000);
var_hidden3 varchar2(10);
var_value3 varchar2(100);
var_i_xskf3 number(2) := 0; — 控制 商品编号 条件的组合
— ——————————————–
begin
var_sql := ‘select s.sr_id as 商品id , mp.re_name as 销售库房 , cl.cc_name as 商品类型 , s.sr_number as 商品编号,s.sr_name as 商品名称, sc.cs_idername as 出库单号, sc.cs_zuser as 主销售员, sc.cs_fuser as 配合销售员, sc.cs_leixing as 销售类型 , sc.cs_invoice as 发票号码 , sc.cs_man1 as 客户名称, ma.ar_name as 客户区域 , s.sr_price1 as 商品进价, sc.cs_price as 商品售价,sc.cs_price – s.sr_price1 as 利润 , sc.cs_intime as 售出时间 from s_storeroom s join s_comclass cl on s.sr_ccid = cl.cc_id join s_comsale sc on s.sr_number = sc.cs_srid join mp_reta mp on mp.re_id = s.sr_reid join c_customerInf ci on ci.ci_id = sc.cs_manid join mp_Area ma on ma.ar_id = ci.ci_arid where 1=1’;
— 1. 销售库房 组合查询字符串
for i in 1..xskf_lst.count loop
–取得choice各列的值
var_choice1 := xskf_lst(i);
var_hidden1 := xskf_lst(i).xhidden;
var_value1 := xskf_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_xskf1 then
–第一个条件
if var_hidden1 = ‘like’ then
var_sql_like1 := ‘ and (mp.re_name like ”%’|| var_value1 ||’%”’;
end if;
if var_hidden1 = ‘not like’ then
— 第一个 not like
var_sql_notlike1 := ‘ and (mp.re_name not like ”%’|| var_value1 ||’%”’;
end if;
if var_hidden1=’=’ then
— 第一个 =
var_sql_eq1 := ‘ and (mp.re_name = ”’|| var_value1 ||””;
end if;
if var_hidden1 = ‘>’ then
— 第一个 >
var_sql_gt1 := ‘ and (mp.re_name > ”’|| var_value1 ||””;
end if;
if var_hidden1 = ‘<' then
— 第一个 <
var_sql_lt1 := ‘ and (mp.re_name < '''|| var_value1 ||'''';
end if;
if var_hidden1 = ‘>=’ then
var_sql_gteq1 := ‘ and (mp.re_name >= ”’|| var_value1 ||””;
end if;
if var_hidden1 = ‘<=' then
var_sql_lteq1 := ‘ and (mp.re_name <= '''|| var_value1 ||'''';
end if;
if var_hidden1 = ” then
var_sql_uneq1 := ‘ and (mp.re_name ”’|| var_value1 ||””;
end if;
else
— 多于一个条件
if var_hidden1 = ‘like’ then
var_sql_like1 := var_sql_like1 || ‘ or mp.re_name like ”%’|| var_value1 ||’%”’;
end if;
if var_hidden1 = ‘not like’ then
— 第一个 not like
var_sql_notlike1 := var_sql_notlike1 || ‘ or mp.re_name not like ”%’|| var_value1 ||’%”’;
end if;
if var_hidden1=’=’ then
— 第一个 =
var_sql_eq1 := var_sql_eq1 || ‘ or mp.re_name = ”’|| var_value1 ||””;
end if;
if var_hidden1 = ‘>’ then
— 第一个 >
var_sql_gt1 := var_sql_gt1 || ‘ or mp.re_name > ”’|| var_value1 ||””;
end if;
if var_hidden1 = ‘<' then
— 第一个 <
var_sql_lt1 := var_sql_lt1 || ‘ or mp.re_name < '''|| var_value1 ||'''';
end if;
if var_hidden1 = ‘>=’ then
var_sql_gteq1 := var_sql_gteq1 || ‘ or mp.re_name >= ”’|| var_value1 ||””;
end if;
if var_hidden1 = ‘<=' then
var_sql_lteq1 := var_sql_lteq1 || ‘ or mp.re_name <= '''|| var_value1 ||'''';
end if;
if var_hidden1 = ” then
var_sql_uneq1 := var_sql_uneq1 || ‘ or mp.re_name ”’|| var_value1 ||””;
end if;
end if;
var_sql := var_sql || var_sql_like1 || var_sql_notlike1 || var_sql_lt1 || var_sql_gt1 || var_sql_lteq1 || var_sql_gteq1 || var_sql_uneq1 || var_sql_eq1;
var_i_xskf1 := var_i_xskf1 + 1;
end loop;
if var_i_xskf1 > 0 then
— 存在筛选条件,在筛选条件最后添加 ‘ ) ‘ , 结束
var_sql := var_sql || ‘)’;
end if;


Oracle通过struct传入varchar2参数为null的解决办法
  • Oracle针对某列让特定信息排序[decode]
  • Oracle针对某列让特定信息排序[decode] | Oracle针对某列让特定信息排序[decode] ...

    Oracle通过struct传入varchar2参数为null的解决办法
  • Oracle 11g修改open_links参数的方式--并发
  • Oracle 11g修改open_links参数的方式--并发 | Oracle 11g修改open_links参数的方式--并发 ...

    Oracle通过struct传入varchar2参数为null的解决办法
  • WEB服务器无法连接上Oracle 数据库的故障处理
  • WEB服务器无法连接上Oracle 数据库的故障处理 | WEB服务器无法连接上Oracle 数据库的故障处理 ...