求大牛给个设计思路,关于将oracle的function中的条件和结果作为动态条件进行配置

快40的码农 2015-09-17 02:37:03
--表及数据:-------------------
create table COTEST
(
co1 VARCHAR2(100),
co2 VARCHAR2(100)
);

insert into COTEST (co1, co2)
values ('1', 'aa_b');
insert into COTEST (co1, co2)
values ('1', 'a_b');
insert into COTEST (co1, co2)
values ('1', 'a_bb');
insert into COTEST (co1, co2)
values ('1', 'aa_bb');
insert into COTEST (co1, co2)
values ('2', 'aa_b');
insert into COTEST (co1, co2)
values ('2', 'a_b');
insert into COTEST (co1, co2)
values ('2', 'a_bb');
insert into COTEST (co1, co2)
values ('2', 'aa_bbb');
insert into COTEST (co1, co2)
values ('3', 'aa');
commit;
--function--------------------
create or replace function func_demo(co1 in varchar2, co2 in varchar2)
return varchar2 is
restr varchar2(100);
begin

if (co1 = '3') then
return '结果3';
end if;
if (co1 = '1') then
if (instr(co2, 'bb') > 0) then
return '结果1-1';
else
return '结果1-2';
end if;
end if;
if (co1 = '2') then
if (instr(co2, 'bbb') > 0) then
return '结果2-1';
else
return '结果2-2';
end if;
end if;
return(restr);
end func_demo;

--根据方法输出的结果---------
select t.*,func_demo(co1,co2) 结果 from cotest t
--end------------------------

--我想做这样的设计:----------
设计一个配置表,将上面的function中if的条件和对应输出的结果进行动态配置,
然后写一个方法,读取这个配置表中的条件并输出对应的结果
...全文
184 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingwinerxp 2015-09-18
  • 打赏
  • 举报
回复
给出一种思路,请参考,注意,条件我没有配完。
快40的码农 2015-09-18
  • 打赏
  • 举报
回复
引用 2 楼 SuperMan_ 的回复:
[quote=引用 1 楼 binsweet 的回复:] 问题没说清 无非就是这样处理:
SELECT COUNT(co1) INT n_count FROM cotest WHERE co1 = :v_co1;
IF n_count = 1 THEN
  SELECT co2 INTO v_return FROM cotest WHERE co1 = :v_co1;
ELSE
  SELECT COUNT(co1) INT n_count
    FROM cotest
   WHERE co1 = :v_co1
     AND co2 LIKE '%' || v_co2 || '%';
  IF n_count = 1 THEN
    SELECT co2
      INTO v_return
      FROM cotest
     WHERE co1 = :v_co1
       AND co2 LIKE '%' || v_co2 || '%';
  END IF;
END IF;

RETURN v_return;
我就是想函数中的if条件和if中的输出结果是可配置的.[/quote] if的条件和返回的结果都是动态配置的, 我现在是代码写死的,有10个条件就要写10个if判断. 能不能将这10个if和返回结果做成一个配置表,我写一个方法,去读取这个配置表,根据配置的条件和对应的结果返回数据
快40的码农 2015-09-18
  • 打赏
  • 举报
回复
引用 1 楼 binsweet 的回复:
问题没说清 无非就是这样处理:
SELECT COUNT(co1) INT n_count FROM cotest WHERE co1 = :v_co1;
IF n_count = 1 THEN
  SELECT co2 INTO v_return FROM cotest WHERE co1 = :v_co1;
ELSE
  SELECT COUNT(co1) INT n_count
    FROM cotest
   WHERE co1 = :v_co1
     AND co2 LIKE '%' || v_co2 || '%';
  IF n_count = 1 THEN
    SELECT co2
      INTO v_return
      FROM cotest
     WHERE co1 = :v_co1
       AND co2 LIKE '%' || v_co2 || '%';
  END IF;
END IF;

RETURN v_return;
我就是想函数中的if条件和if中的输出结果是可配置的.
binsweet 2015-09-17
  • 打赏
  • 举报
回复
问题没说清 无非就是这样处理:
SELECT COUNT(co1) INT n_count FROM cotest WHERE co1 = :v_co1;
IF n_count = 1 THEN
  SELECT co2 INTO v_return FROM cotest WHERE co1 = :v_co1;
ELSE
  SELECT COUNT(co1) INT n_count
    FROM cotest
   WHERE co1 = :v_co1
     AND co2 LIKE '%' || v_co2 || '%';
  IF n_count = 1 THEN
    SELECT co2
      INTO v_return
      FROM cotest
     WHERE co1 = :v_co1
       AND co2 LIKE '%' || v_co2 || '%';
  END IF;
END IF;

RETURN v_return;

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧